// export Game_Type ; export def_base_level , def_amount_of_people , def_skill_level , def_starting_resources , def_shipments_density , def_extra_oil_deposits , def_extra_sib_deposits , def_shared_vision , def_morale_flags , def_siberite_detection , def_people_respawning , def_amount_of_apemen , def_amount_of_siberit , def_public_score , def_siberite_bomb , def_builduptime ; export is_depot , number_of_breastworks , number_of_people , skill_level , starting_crates , starting_resources , shipments_density , amount_of_apemen , amount_of_siberit , respawning_time_min , respawning_time_max , morale_decreasing_time , battle_flags_id , builduptime , inbuildup ; export def_artefact_one , def_artefact_two , def_artefact_three , def_artefact_two_using ; export Side_Count , Team_Count , Player_Side , Player_Team , Side_Teams , Teams , Side_IsSpec ; export Side_Positions , Side_Nations , Side_Names , Team_Names , Team_Game ; export depot_def , breastworks_def , start_def , normal_oil_deposits_locations , extra_oil_deposits_locations , normal_sib_deposits_locations , extra_sib_deposits_locations , def_max_sides ; export commander ; var global_units , global_defined , soldiers_created ; function read_multiplayer_and_game_parameters ; var side , dep , br1 , br2 , br3 , un , i ; begin
   0: LD_INT 0
   2: PPUSH
   3: PPUSH
   4: PPUSH
   5: PPUSH
   6: PPUSH
   7: PPUSH
   8: PPUSH
   9: PPUSH
// if MultiPlayer then
  10: LD_OWVAR 4
  14: IFFALSE 88
// begin Game_Type = mp_game_type ;
  16: LD_ADDR_EXP 1
  20: PUSH
  21: LD_OWVAR 6
  25: ST_TO_ADDR
// Player_Side := mp_player_side ;
  26: LD_ADDR_EXP 39
  30: PUSH
  31: LD_OWVAR 7
  35: ST_TO_ADDR
// Player_Team := mp_player_team ;
  36: LD_ADDR_EXP 40
  40: PUSH
  41: LD_OWVAR 8
  45: ST_TO_ADDR
// Side_Positions := mp_sides_positions ;
  46: LD_ADDR_EXP 44
  50: PUSH
  51: LD_OWVAR 17
  55: ST_TO_ADDR
// Side_Teams := mp_sides_teams ;
  56: LD_ADDR_EXP 41
  60: PUSH
  61: LD_OWVAR 15
  65: ST_TO_ADDR
// Side_Nations := mp_sides_nations ;
  66: LD_ADDR_EXP 45
  70: PUSH
  71: LD_OWVAR 16
  75: ST_TO_ADDR
// Teams = mp_teams ;
  76: LD_ADDR_EXP 42
  80: PUSH
  81: LD_OWVAR 12
  85: ST_TO_ADDR
// end else
  86: GO 278
// begin Game_Type := 4 ;
  88: LD_ADDR_EXP 1
  92: PUSH
  93: LD_INT 4
  95: ST_TO_ADDR
// Player_Side := 1 ;
  96: LD_ADDR_EXP 39
 100: PUSH
 101: LD_INT 1
 103: ST_TO_ADDR
// Player_Team := 1 ;
 104: LD_ADDR_EXP 40
 108: PUSH
 109: LD_INT 1
 111: ST_TO_ADDR
// Side_Positions := [ 1 , 2 , 3 , 4 , 5 , 6 , 0 , 0 ] ;
 112: LD_ADDR_EXP 44
 116: PUSH
 117: LD_INT 1
 119: PUSH
 120: LD_INT 2
 122: PUSH
 123: LD_INT 3
 125: PUSH
 126: LD_INT 4
 128: PUSH
 129: LD_INT 5
 131: PUSH
 132: LD_INT 6
 134: PUSH
 135: LD_INT 0
 137: PUSH
 138: LD_INT 0
 140: PUSH
 141: EMPTY
 142: LIST
 143: LIST
 144: LIST
 145: LIST
 146: LIST
 147: LIST
 148: LIST
 149: LIST
 150: ST_TO_ADDR
// Side_Teams := [ 1 , 2 , 3 , 4 , 5 , 6 , 0 , 0 ] ;
 151: LD_ADDR_EXP 41
 155: PUSH
 156: LD_INT 1
 158: PUSH
 159: LD_INT 2
 161: PUSH
 162: LD_INT 3
 164: PUSH
 165: LD_INT 4
 167: PUSH
 168: LD_INT 5
 170: PUSH
 171: LD_INT 6
 173: PUSH
 174: LD_INT 0
 176: PUSH
 177: LD_INT 0
 179: PUSH
 180: EMPTY
 181: LIST
 182: LIST
 183: LIST
 184: LIST
 185: LIST
 186: LIST
 187: LIST
 188: LIST
 189: ST_TO_ADDR
// Side_Nations := [ 1 , 2 , 3 , 1 , 2 , 3 , 0 , 0 ] ;
 190: LD_ADDR_EXP 45
 194: PUSH
 195: LD_INT 1
 197: PUSH
 198: LD_INT 2
 200: PUSH
 201: LD_INT 3
 203: PUSH
 204: LD_INT 1
 206: PUSH
 207: LD_INT 2
 209: PUSH
 210: LD_INT 3
 212: PUSH
 213: LD_INT 0
 215: PUSH
 216: LD_INT 0
 218: PUSH
 219: EMPTY
 220: LIST
 221: LIST
 222: LIST
 223: LIST
 224: LIST
 225: LIST
 226: LIST
 227: LIST
 228: ST_TO_ADDR
// Teams := [ [ 1 ] , [ 2 ] , [ 3 ] , [ 4 ] , [ 5 ] , [ 6 ] ] ;
 229: LD_ADDR_EXP 42
 233: PUSH
 234: LD_INT 1
 236: PUSH
 237: EMPTY
 238: LIST
 239: PUSH
 240: LD_INT 2
 242: PUSH
 243: EMPTY
 244: LIST
 245: PUSH
 246: LD_INT 3
 248: PUSH
 249: EMPTY
 250: LIST
 251: PUSH
 252: LD_INT 4
 254: PUSH
 255: EMPTY
 256: LIST
 257: PUSH
 258: LD_INT 5
 260: PUSH
 261: EMPTY
 262: LIST
 263: PUSH
 264: LD_INT 6
 266: PUSH
 267: EMPTY
 268: LIST
 269: PUSH
 270: EMPTY
 271: LIST
 272: LIST
 273: LIST
 274: LIST
 275: LIST
 276: LIST
 277: ST_TO_ADDR
// end ; Side_IsSpec := [ false , false , false , false , false , false , false , false ] ;
 278: LD_ADDR_EXP 43
 282: PUSH
 283: LD_INT 0
 285: PUSH
 286: LD_INT 0
 288: PUSH
 289: LD_INT 0
 291: PUSH
 292: LD_INT 0
 294: PUSH
 295: LD_INT 0
 297: PUSH
 298: LD_INT 0
 300: PUSH
 301: LD_INT 0
 303: PUSH
 304: LD_INT 0
 306: PUSH
 307: EMPTY
 308: LIST
 309: LIST
 310: LIST
 311: LIST
 312: LIST
 313: LIST
 314: LIST
 315: LIST
 316: ST_TO_ADDR
// Side_Count = ( Side_Positions diff [ 0 ] ) + 0 ;
 317: LD_ADDR_EXP 37
 321: PUSH
 322: LD_EXP 44
 326: PUSH
 327: LD_INT 0
 329: PUSH
 330: EMPTY
 331: LIST
 332: DIFF
 333: PUSH
 334: LD_INT 0
 336: PLUS
 337: ST_TO_ADDR
// Team_Count = ( Side_Teams diff [ 0 ] ) + 0 ;
 338: LD_ADDR_EXP 38
 342: PUSH
 343: LD_EXP 41
 347: PUSH
 348: LD_INT 0
 350: PUSH
 351: EMPTY
 352: LIST
 353: DIFF
 354: PUSH
 355: LD_INT 0
 357: PLUS
 358: ST_TO_ADDR
// if MultiPlayer then
 359: LD_OWVAR 4
 363: IFFALSE 595
// begin def_base_level := GetMultiplayerSetting ( 0 ) ;
 365: LD_ADDR_EXP 2
 369: PUSH
 370: LD_INT 0
 372: PPUSH
 373: CALL_OW 426
 377: ST_TO_ADDR
// def_amount_of_people := GetMultiplayerSetting ( 1 ) ;
 378: LD_ADDR_EXP 3
 382: PUSH
 383: LD_INT 1
 385: PPUSH
 386: CALL_OW 426
 390: ST_TO_ADDR
// def_skill_level := GetMultiplayerSetting ( 2 ) ;
 391: LD_ADDR_EXP 4
 395: PUSH
 396: LD_INT 2
 398: PPUSH
 399: CALL_OW 426
 403: ST_TO_ADDR
// def_starting_resources := GetMultiplayerSetting ( 3 ) ;
 404: LD_ADDR_EXP 5
 408: PUSH
 409: LD_INT 3
 411: PPUSH
 412: CALL_OW 426
 416: ST_TO_ADDR
// def_shipments_density := GetMultiplayerSetting ( 4 ) ;
 417: LD_ADDR_EXP 6
 421: PUSH
 422: LD_INT 4
 424: PPUSH
 425: CALL_OW 426
 429: ST_TO_ADDR
// def_extra_oil_deposits := GetMultiplayerSetting ( 5 ) ;
 430: LD_ADDR_EXP 7
 434: PUSH
 435: LD_INT 5
 437: PPUSH
 438: CALL_OW 426
 442: ST_TO_ADDR
// def_extra_sib_deposits := GetMultiplayerSetting ( 6 ) ;
 443: LD_ADDR_EXP 8
 447: PUSH
 448: LD_INT 6
 450: PPUSH
 451: CALL_OW 426
 455: ST_TO_ADDR
// if Game_Type = 1 then
 456: LD_EXP 1
 460: PUSH
 461: LD_INT 1
 463: EQUAL
 464: IFFALSE 476
// def_shared_vision := false else
 466: LD_ADDR_EXP 9
 470: PUSH
 471: LD_INT 0
 473: ST_TO_ADDR
 474: GO 489
// def_shared_vision := GetMultiplayerSetting ( 10 ) ;
 476: LD_ADDR_EXP 9
 480: PUSH
 481: LD_INT 10
 483: PPUSH
 484: CALL_OW 426
 488: ST_TO_ADDR
// def_morale_flags := GetMultiplayerSetting ( 11 ) ;
 489: LD_ADDR_EXP 10
 493: PUSH
 494: LD_INT 11
 496: PPUSH
 497: CALL_OW 426
 501: ST_TO_ADDR
// def_siberite_detection := GetMultiplayerSetting ( 12 ) ;
 502: LD_ADDR_EXP 11
 506: PUSH
 507: LD_INT 12
 509: PPUSH
 510: CALL_OW 426
 514: ST_TO_ADDR
// def_people_respawning := GetMultiplayerSetting ( 13 ) ;
 515: LD_ADDR_EXP 12
 519: PUSH
 520: LD_INT 13
 522: PPUSH
 523: CALL_OW 426
 527: ST_TO_ADDR
// def_amount_of_apemen := GetMultiplayerSetting ( 14 ) ;
 528: LD_ADDR_EXP 13
 532: PUSH
 533: LD_INT 14
 535: PPUSH
 536: CALL_OW 426
 540: ST_TO_ADDR
// def_amount_of_siberit := GetMultiplayerSetting ( 15 ) ;
 541: LD_ADDR_EXP 14
 545: PUSH
 546: LD_INT 15
 548: PPUSH
 549: CALL_OW 426
 553: ST_TO_ADDR
// def_public_score := GetMultiplayerSetting ( 16 ) ;
 554: LD_ADDR_EXP 15
 558: PUSH
 559: LD_INT 16
 561: PPUSH
 562: CALL_OW 426
 566: ST_TO_ADDR
// def_siberite_bomb := GetMultiplayerSetting ( 17 ) ;
 567: LD_ADDR_EXP 16
 571: PUSH
 572: LD_INT 17
 574: PPUSH
 575: CALL_OW 426
 579: ST_TO_ADDR
// def_builduptime := GetMultiplayerSetting ( 20 ) ;
 580: LD_ADDR_EXP 17
 584: PUSH
 585: LD_INT 20
 587: PPUSH
 588: CALL_OW 426
 592: ST_TO_ADDR
// end else
 593: GO 727
// begin randomize ;
 595: CALL_OW 10
// def_base_level := 2 ;
 599: LD_ADDR_EXP 2
 603: PUSH
 604: LD_INT 2
 606: ST_TO_ADDR
// def_amount_of_people := 0 ;
 607: LD_ADDR_EXP 3
 611: PUSH
 612: LD_INT 0
 614: ST_TO_ADDR
// def_skill_level := 1 ;
 615: LD_ADDR_EXP 4
 619: PUSH
 620: LD_INT 1
 622: ST_TO_ADDR
// def_starting_resources := 2 ;
 623: LD_ADDR_EXP 5
 627: PUSH
 628: LD_INT 2
 630: ST_TO_ADDR
// def_shipments_density := 1 ;
 631: LD_ADDR_EXP 6
 635: PUSH
 636: LD_INT 1
 638: ST_TO_ADDR
// def_extra_oil_deposits := 0 ;
 639: LD_ADDR_EXP 7
 643: PUSH
 644: LD_INT 0
 646: ST_TO_ADDR
// def_extra_sib_deposits := 1 ;
 647: LD_ADDR_EXP 8
 651: PUSH
 652: LD_INT 1
 654: ST_TO_ADDR
// def_shared_vision := 1 ;
 655: LD_ADDR_EXP 9
 659: PUSH
 660: LD_INT 1
 662: ST_TO_ADDR
// def_morale_flags := 1 ;
 663: LD_ADDR_EXP 10
 667: PUSH
 668: LD_INT 1
 670: ST_TO_ADDR
// def_siberite_detection := 1 ;
 671: LD_ADDR_EXP 11
 675: PUSH
 676: LD_INT 1
 678: ST_TO_ADDR
// def_people_respawning := 2 ;
 679: LD_ADDR_EXP 12
 683: PUSH
 684: LD_INT 2
 686: ST_TO_ADDR
// def_amount_of_apemen := 3 ;
 687: LD_ADDR_EXP 13
 691: PUSH
 692: LD_INT 3
 694: ST_TO_ADDR
// def_amount_of_siberit := 0 ;
 695: LD_ADDR_EXP 14
 699: PUSH
 700: LD_INT 0
 702: ST_TO_ADDR
// def_public_score := 1 ;
 703: LD_ADDR_EXP 15
 707: PUSH
 708: LD_INT 1
 710: ST_TO_ADDR
// def_siberite_bomb := 0 ;
 711: LD_ADDR_EXP 16
 715: PUSH
 716: LD_INT 0
 718: ST_TO_ADDR
// def_builduptime := 0 ;
 719: LD_ADDR_EXP 17
 723: PUSH
 724: LD_INT 0
 726: ST_TO_ADDR
// end ; if ( Game_Type = 10 ) or ( Game_Type = 11 ) then
 727: LD_EXP 1
 731: PUSH
 732: LD_INT 10
 734: EQUAL
 735: PUSH
 736: LD_EXP 1
 740: PUSH
 741: LD_INT 11
 743: EQUAL
 744: OR
 745: IFFALSE 887
// begin def_base_level := 2 ;
 747: LD_ADDR_EXP 2
 751: PUSH
 752: LD_INT 2
 754: ST_TO_ADDR
// def_amount_of_people := 2 ;
 755: LD_ADDR_EXP 3
 759: PUSH
 760: LD_INT 2
 762: ST_TO_ADDR
// def_skill_level := 1 ;
 763: LD_ADDR_EXP 4
 767: PUSH
 768: LD_INT 1
 770: ST_TO_ADDR
// def_starting_resources := 2 ;
 771: LD_ADDR_EXP 5
 775: PUSH
 776: LD_INT 2
 778: ST_TO_ADDR
// def_shipments_density := 1 ;
 779: LD_ADDR_EXP 6
 783: PUSH
 784: LD_INT 1
 786: ST_TO_ADDR
// def_extra_oil_deposits := 0 ;
 787: LD_ADDR_EXP 7
 791: PUSH
 792: LD_INT 0
 794: ST_TO_ADDR
// def_extra_sib_deposits := 1 ;
 795: LD_ADDR_EXP 8
 799: PUSH
 800: LD_INT 1
 802: ST_TO_ADDR
// if Game_Type = 10 then
 803: LD_EXP 1
 807: PUSH
 808: LD_INT 10
 810: EQUAL
 811: IFFALSE 823
// def_shared_vision := false else
 813: LD_ADDR_EXP 9
 817: PUSH
 818: LD_INT 0
 820: ST_TO_ADDR
 821: GO 831
// def_shared_vision := 1 ;
 823: LD_ADDR_EXP 9
 827: PUSH
 828: LD_INT 1
 830: ST_TO_ADDR
// def_morale_flags := 3 ;
 831: LD_ADDR_EXP 10
 835: PUSH
 836: LD_INT 3
 838: ST_TO_ADDR
// def_siberite_detection := 1 ;
 839: LD_ADDR_EXP 11
 843: PUSH
 844: LD_INT 1
 846: ST_TO_ADDR
// def_people_respawning := 1 ;
 847: LD_ADDR_EXP 12
 851: PUSH
 852: LD_INT 1
 854: ST_TO_ADDR
// def_amount_of_apemen := 2 ;
 855: LD_ADDR_EXP 13
 859: PUSH
 860: LD_INT 2
 862: ST_TO_ADDR
// def_siberite_bomb := 0 ;
 863: LD_ADDR_EXP 16
 867: PUSH
 868: LD_INT 0
 870: ST_TO_ADDR
// def_builduptime := 2 ;
 871: LD_ADDR_EXP 17
 875: PUSH
 876: LD_INT 2
 878: ST_TO_ADDR
// def_public_score := 1 ;
 879: LD_ADDR_EXP 15
 883: PUSH
 884: LD_INT 1
 886: ST_TO_ADDR
// end ; is_depot := [ 0 , 1 , 1 ] [ def_base_level + 1 ] ;
 887: LD_ADDR_EXP 18
 891: PUSH
 892: LD_INT 0
 894: PUSH
 895: LD_INT 1
 897: PUSH
 898: LD_INT 1
 900: PUSH
 901: EMPTY
 902: LIST
 903: LIST
 904: LIST
 905: PUSH
 906: LD_EXP 2
 910: PUSH
 911: LD_INT 1
 913: PLUS
 914: ARRAY
 915: ST_TO_ADDR
// number_of_breastworks := [ 0 , 0 , 2 ] [ def_base_level + 1 ] ;
 916: LD_ADDR_EXP 19
 920: PUSH
 921: LD_INT 0
 923: PUSH
 924: LD_INT 0
 926: PUSH
 927: LD_INT 2
 929: PUSH
 930: EMPTY
 931: LIST
 932: LIST
 933: LIST
 934: PUSH
 935: LD_EXP 2
 939: PUSH
 940: LD_INT 1
 942: PLUS
 943: ARRAY
 944: ST_TO_ADDR
// number_of_people := [ 9 , 12 , 15 , 24 ] [ def_amount_of_people + 1 ] ;
 945: LD_ADDR_EXP 20
 949: PUSH
 950: LD_INT 9
 952: PUSH
 953: LD_INT 12
 955: PUSH
 956: LD_INT 15
 958: PUSH
 959: LD_INT 24
 961: PUSH
 962: EMPTY
 963: LIST
 964: LIST
 965: LIST
 966: LIST
 967: PUSH
 968: LD_EXP 3
 972: PUSH
 973: LD_INT 1
 975: PLUS
 976: ARRAY
 977: ST_TO_ADDR
// skill_level := [ 2 , 3 , 4 , 5 ] [ def_skill_level + 1 ] ;
 978: LD_ADDR_EXP 21
 982: PUSH
 983: LD_INT 2
 985: PUSH
 986: LD_INT 3
 988: PUSH
 989: LD_INT 4
 991: PUSH
 992: LD_INT 5
 994: PUSH
 995: EMPTY
 996: LIST
 997: LIST
 998: LIST
 999: LIST
1000: PUSH
1001: LD_EXP 4
1005: PUSH
1006: LD_INT 1
1008: PLUS
1009: ARRAY
1010: ST_TO_ADDR
// starting_resources := [ [ 0 , 0 , 0 ] , [ 30 , 0 , 0 ] , [ 50 , 20 , 0 ] , [ 80 , 40 , 20 ] ] [ def_starting_resources + 1 ] ;
1011: LD_ADDR_EXP 23
1015: PUSH
1016: LD_INT 0
1018: PUSH
1019: LD_INT 0
1021: PUSH
1022: LD_INT 0
1024: PUSH
1025: EMPTY
1026: LIST
1027: LIST
1028: LIST
1029: PUSH
1030: LD_INT 30
1032: PUSH
1033: LD_INT 0
1035: PUSH
1036: LD_INT 0
1038: PUSH
1039: EMPTY
1040: LIST
1041: LIST
1042: LIST
1043: PUSH
1044: LD_INT 50
1046: PUSH
1047: LD_INT 20
1049: PUSH
1050: LD_INT 0
1052: PUSH
1053: EMPTY
1054: LIST
1055: LIST
1056: LIST
1057: PUSH
1058: LD_INT 80
1060: PUSH
1061: LD_INT 40
1063: PUSH
1064: LD_INT 20
1066: PUSH
1067: EMPTY
1068: LIST
1069: LIST
1070: LIST
1071: PUSH
1072: EMPTY
1073: LIST
1074: LIST
1075: LIST
1076: LIST
1077: PUSH
1078: LD_EXP 5
1082: PUSH
1083: LD_INT 1
1085: PLUS
1086: ARRAY
1087: ST_TO_ADDR
// starting_crates := [ [ 10 ] , [ 7 , 14 ] , [ 6 , 12 , 18 ] , [ 5 , 10 , 15 , 20 ] ] [ def_starting_resources + 1 ] ;
1088: LD_ADDR_EXP 22
1092: PUSH
1093: LD_INT 10
1095: PUSH
1096: EMPTY
1097: LIST
1098: PUSH
1099: LD_INT 7
1101: PUSH
1102: LD_INT 14
1104: PUSH
1105: EMPTY
1106: LIST
1107: LIST
1108: PUSH
1109: LD_INT 6
1111: PUSH
1112: LD_INT 12
1114: PUSH
1115: LD_INT 18
1117: PUSH
1118: EMPTY
1119: LIST
1120: LIST
1121: LIST
1122: PUSH
1123: LD_INT 5
1125: PUSH
1126: LD_INT 10
1128: PUSH
1129: LD_INT 15
1131: PUSH
1132: LD_INT 20
1134: PUSH
1135: EMPTY
1136: LIST
1137: LIST
1138: LIST
1139: LIST
1140: PUSH
1141: EMPTY
1142: LIST
1143: LIST
1144: LIST
1145: LIST
1146: PUSH
1147: LD_EXP 5
1151: PUSH
1152: LD_INT 1
1154: PLUS
1155: ARRAY
1156: ST_TO_ADDR
// shipments_density := [ 150 , 100 , 50 ] [ def_shipments_density + 1 ] ;
1157: LD_ADDR_EXP 24
1161: PUSH
1162: LD_INT 150
1164: PUSH
1165: LD_INT 100
1167: PUSH
1168: LD_INT 50
1170: PUSH
1171: EMPTY
1172: LIST
1173: LIST
1174: LIST
1175: PUSH
1176: LD_EXP 6
1180: PUSH
1181: LD_INT 1
1183: PLUS
1184: ARRAY
1185: ST_TO_ADDR
// respawning_time_min := [ 0 0$0 , 5 5$00 , 3 3$0 ] [ def_people_respawning + 1 ] ;
1186: LD_ADDR_EXP 27
1190: PUSH
1191: LD_INT 0
1193: PUSH
1194: LD_INT 10500
1196: PUSH
1197: LD_INT 6300
1199: PUSH
1200: EMPTY
1201: LIST
1202: LIST
1203: LIST
1204: PUSH
1205: LD_EXP 12
1209: PUSH
1210: LD_INT 1
1212: PLUS
1213: ARRAY
1214: ST_TO_ADDR
// respawning_time_max := [ 0 0$0 , 15 15$00 , 5 5$0 ] [ def_people_respawning + 1 ] ;
1215: LD_ADDR_EXP 28
1219: PUSH
1220: LD_INT 0
1222: PUSH
1223: LD_INT 31500
1225: PUSH
1226: LD_INT 10500
1228: PUSH
1229: EMPTY
1230: LIST
1231: LIST
1232: LIST
1233: PUSH
1234: LD_EXP 12
1238: PUSH
1239: LD_INT 1
1241: PLUS
1242: ARRAY
1243: ST_TO_ADDR
// amount_of_apemen := [ 0 , 3 , 6 , 9 ] [ def_amount_of_apemen + 1 ] ;
1244: LD_ADDR_EXP 25
1248: PUSH
1249: LD_INT 0
1251: PUSH
1252: LD_INT 3
1254: PUSH
1255: LD_INT 6
1257: PUSH
1258: LD_INT 9
1260: PUSH
1261: EMPTY
1262: LIST
1263: LIST
1264: LIST
1265: LIST
1266: PUSH
1267: LD_EXP 13
1271: PUSH
1272: LD_INT 1
1274: PLUS
1275: ARRAY
1276: ST_TO_ADDR
// amount_of_siberit := [ 30 , 50 , 80 , 100 , 130 , 150 , 200 ] [ def_amount_of_siberit + 1 ] ;
1277: LD_ADDR_EXP 26
1281: PUSH
1282: LD_INT 30
1284: PUSH
1285: LD_INT 50
1287: PUSH
1288: LD_INT 80
1290: PUSH
1291: LD_INT 100
1293: PUSH
1294: LD_INT 130
1296: PUSH
1297: LD_INT 150
1299: PUSH
1300: LD_INT 200
1302: PUSH
1303: EMPTY
1304: LIST
1305: LIST
1306: LIST
1307: LIST
1308: LIST
1309: LIST
1310: LIST
1311: PUSH
1312: LD_EXP 14
1316: PUSH
1317: LD_INT 1
1319: PLUS
1320: ARRAY
1321: ST_TO_ADDR
// morale_decreasing_time = [ - 1 , 0 0$10 , 0 0$20 , 0 0$40 , 0 0$0 ] [ def_morale_flags + 1 ] ;
1322: LD_ADDR_EXP 29
1326: PUSH
1327: LD_INT 1
1329: NEG
1330: PUSH
1331: LD_INT 350
1333: PUSH
1334: LD_INT 700
1336: PUSH
1337: LD_INT 1400
1339: PUSH
1340: LD_INT 0
1342: PUSH
1343: EMPTY
1344: LIST
1345: LIST
1346: LIST
1347: LIST
1348: LIST
1349: PUSH
1350: LD_EXP 10
1354: PUSH
1355: LD_INT 1
1357: PLUS
1358: ARRAY
1359: ST_TO_ADDR
// battle_flags_id = [ ] ;
1360: LD_ADDR_EXP 30
1364: PUSH
1365: EMPTY
1366: ST_TO_ADDR
// if def_builduptime > 0 then
1367: LD_EXP 17
1371: PUSH
1372: LD_INT 0
1374: GREATER
1375: IFFALSE 1385
// inbuildup := true ;
1377: LD_ADDR_EXP 32
1381: PUSH
1382: LD_INT 1
1384: ST_TO_ADDR
// normal_oil_deposits_locations := [ [ 60 , 75 ] , [ 87 , 23 ] ] ;
1385: LD_ADDR_EXP 52
1389: PUSH
1390: LD_INT 60
1392: PUSH
1393: LD_INT 75
1395: PUSH
1396: EMPTY
1397: LIST
1398: LIST
1399: PUSH
1400: LD_INT 87
1402: PUSH
1403: LD_INT 23
1405: PUSH
1406: EMPTY
1407: LIST
1408: LIST
1409: PUSH
1410: EMPTY
1411: LIST
1412: LIST
1413: ST_TO_ADDR
// extra_oil_deposits_locations := [ [ [ 60 , 75 ] , [ 73 , 76 ] ] , [ [ 87 , 23 ] , [ 74 , 24 ] ] ] ;
1414: LD_ADDR_EXP 53
1418: PUSH
1419: LD_INT 60
1421: PUSH
1422: LD_INT 75
1424: PUSH
1425: EMPTY
1426: LIST
1427: LIST
1428: PUSH
1429: LD_INT 73
1431: PUSH
1432: LD_INT 76
1434: PUSH
1435: EMPTY
1436: LIST
1437: LIST
1438: PUSH
1439: EMPTY
1440: LIST
1441: LIST
1442: PUSH
1443: LD_INT 87
1445: PUSH
1446: LD_INT 23
1448: PUSH
1449: EMPTY
1450: LIST
1451: LIST
1452: PUSH
1453: LD_INT 74
1455: PUSH
1456: LD_INT 24
1458: PUSH
1459: EMPTY
1460: LIST
1461: LIST
1462: PUSH
1463: EMPTY
1464: LIST
1465: LIST
1466: PUSH
1467: EMPTY
1468: LIST
1469: LIST
1470: ST_TO_ADDR
// normal_sib_deposits_locations := [ [ 61 , 71 ] , [ 85 , 26 ] ] ;
1471: LD_ADDR_EXP 54
1475: PUSH
1476: LD_INT 61
1478: PUSH
1479: LD_INT 71
1481: PUSH
1482: EMPTY
1483: LIST
1484: LIST
1485: PUSH
1486: LD_INT 85
1488: PUSH
1489: LD_INT 26
1491: PUSH
1492: EMPTY
1493: LIST
1494: LIST
1495: PUSH
1496: EMPTY
1497: LIST
1498: LIST
1499: ST_TO_ADDR
// extra_sib_deposits_locations := [ [ [ 61 , 71 ] , [ 32 , 60 ] ] , [ [ 85 , 26 ] , [ 117 , 42 ] ] ] ;
1500: LD_ADDR_EXP 55
1504: PUSH
1505: LD_INT 61
1507: PUSH
1508: LD_INT 71
1510: PUSH
1511: EMPTY
1512: LIST
1513: LIST
1514: PUSH
1515: LD_INT 32
1517: PUSH
1518: LD_INT 60
1520: PUSH
1521: EMPTY
1522: LIST
1523: LIST
1524: PUSH
1525: EMPTY
1526: LIST
1527: LIST
1528: PUSH
1529: LD_INT 85
1531: PUSH
1532: LD_INT 26
1534: PUSH
1535: EMPTY
1536: LIST
1537: LIST
1538: PUSH
1539: LD_INT 117
1541: PUSH
1542: LD_INT 42
1544: PUSH
1545: EMPTY
1546: LIST
1547: LIST
1548: PUSH
1549: EMPTY
1550: LIST
1551: LIST
1552: PUSH
1553: EMPTY
1554: LIST
1555: LIST
1556: ST_TO_ADDR
// depot_def := [ [ 55 , 86 , 0 ] , [ 94 , 15 , 3 ] ] ;
1557: LD_ADDR_EXP 49
1561: PUSH
1562: LD_INT 55
1564: PUSH
1565: LD_INT 86
1567: PUSH
1568: LD_INT 0
1570: PUSH
1571: EMPTY
1572: LIST
1573: LIST
1574: LIST
1575: PUSH
1576: LD_INT 94
1578: PUSH
1579: LD_INT 15
1581: PUSH
1582: LD_INT 3
1584: PUSH
1585: EMPTY
1586: LIST
1587: LIST
1588: LIST
1589: PUSH
1590: EMPTY
1591: LIST
1592: LIST
1593: ST_TO_ADDR
// start_def := [ [ 65 , 75 ] , [ 92 , 24 ] ] ;
1594: LD_ADDR_EXP 51
1598: PUSH
1599: LD_INT 65
1601: PUSH
1602: LD_INT 75
1604: PUSH
1605: EMPTY
1606: LIST
1607: LIST
1608: PUSH
1609: LD_INT 92
1611: PUSH
1612: LD_INT 24
1614: PUSH
1615: EMPTY
1616: LIST
1617: LIST
1618: PUSH
1619: EMPTY
1620: LIST
1621: LIST
1622: ST_TO_ADDR
// breastworks_def := [ [ [ 79 , 86 , 4 ] , [ 47 , 91 , 2 ] ] , [ [ 80 , 14 , 1 ] , [ 104 , 29 , 5 ] ] ] ;
1623: LD_ADDR_EXP 50
1627: PUSH
1628: LD_INT 79
1630: PUSH
1631: LD_INT 86
1633: PUSH
1634: LD_INT 4
1636: PUSH
1637: EMPTY
1638: LIST
1639: LIST
1640: LIST
1641: PUSH
1642: LD_INT 47
1644: PUSH
1645: LD_INT 91
1647: PUSH
1648: LD_INT 2
1650: PUSH
1651: EMPTY
1652: LIST
1653: LIST
1654: LIST
1655: PUSH
1656: EMPTY
1657: LIST
1658: LIST
1659: PUSH
1660: LD_INT 80
1662: PUSH
1663: LD_INT 14
1665: PUSH
1666: LD_INT 1
1668: PUSH
1669: EMPTY
1670: LIST
1671: LIST
1672: LIST
1673: PUSH
1674: LD_INT 104
1676: PUSH
1677: LD_INT 29
1679: PUSH
1680: LD_INT 5
1682: PUSH
1683: EMPTY
1684: LIST
1685: LIST
1686: LIST
1687: PUSH
1688: EMPTY
1689: LIST
1690: LIST
1691: PUSH
1692: EMPTY
1693: LIST
1694: LIST
1695: ST_TO_ADDR
// end ;
1696: LD_VAR 0 1
1700: RET
// function init_map ; var i , j ; begin
1701: LD_INT 0
1703: PPUSH
1704: PPUSH
1705: PPUSH
// for i := 1 to 8 do
1706: LD_ADDR_VAR 0 2
1710: PUSH
1711: DOUBLE
1712: LD_INT 1
1714: DEC
1715: ST_TO_ADDR
1716: LD_INT 8
1718: PUSH
1719: FOR_TO
1720: IFFALSE 1864
// if Side_Positions [ i ] <> 0 then
1722: LD_EXP 44
1726: PUSH
1727: LD_VAR 0 2
1731: ARRAY
1732: PUSH
1733: LD_INT 0
1735: NONEQUAL
1736: IFFALSE 1862
// if not Side_IsSpec [ i ] then
1738: LD_EXP 43
1742: PUSH
1743: LD_VAR 0 2
1747: ARRAY
1748: NOT
1749: IFFALSE 1862
// if def_extra_oil_deposits then
1751: LD_EXP 7
1755: IFFALSE 1813
// for j in extra_oil_deposits_locations [ Side_Positions [ i ] ] do
1757: LD_ADDR_VAR 0 3
1761: PUSH
1762: LD_EXP 53
1766: PUSH
1767: LD_EXP 44
1771: PUSH
1772: LD_VAR 0 2
1776: ARRAY
1777: ARRAY
1778: PUSH
1779: FOR_IN
1780: IFFALSE 1809
// CreateDepositXY ( j [ 1 ] , j [ 2 ] , mat_oil ) else
1782: LD_VAR 0 3
1786: PUSH
1787: LD_INT 1
1789: ARRAY
1790: PPUSH
1791: LD_VAR 0 3
1795: PUSH
1796: LD_INT 2
1798: ARRAY
1799: PPUSH
1800: LD_INT 2
1802: PPUSH
1803: CALL_OW 62
1807: GO 1779
1809: POP
1810: POP
1811: GO 1862
// CreateDepositXY ( normal_oil_deposits_locations [ Side_Positions [ i ] ] [ 1 ] , normal_oil_deposits_locations [ Side_Positions [ i ] ] [ 2 ] , mat_oil ) ;
1813: LD_EXP 52
1817: PUSH
1818: LD_EXP 44
1822: PUSH
1823: LD_VAR 0 2
1827: ARRAY
1828: ARRAY
1829: PUSH
1830: LD_INT 1
1832: ARRAY
1833: PPUSH
1834: LD_EXP 52
1838: PUSH
1839: LD_EXP 44
1843: PUSH
1844: LD_VAR 0 2
1848: ARRAY
1849: ARRAY
1850: PUSH
1851: LD_INT 2
1853: ARRAY
1854: PPUSH
1855: LD_INT 2
1857: PPUSH
1858: CALL_OW 62
1862: GO 1719
1864: POP
1865: POP
// if def_extra_sib_deposits then
1866: LD_EXP 8
1870: IFFALSE 2036
// for i := 1 to 8 do
1872: LD_ADDR_VAR 0 2
1876: PUSH
1877: DOUBLE
1878: LD_INT 1
1880: DEC
1881: ST_TO_ADDR
1882: LD_INT 8
1884: PUSH
1885: FOR_TO
1886: IFFALSE 2034
// if Side_Positions [ i ] <> 0 then
1888: LD_EXP 44
1892: PUSH
1893: LD_VAR 0 2
1897: ARRAY
1898: PUSH
1899: LD_INT 0
1901: NONEQUAL
1902: IFFALSE 2032
// if not Side_IsSpec [ i ] then
1904: LD_EXP 43
1908: PUSH
1909: LD_VAR 0 2
1913: ARRAY
1914: NOT
1915: IFFALSE 2032
// if def_extra_sib_deposits = 2 then
1917: LD_EXP 8
1921: PUSH
1922: LD_INT 2
1924: EQUAL
1925: IFFALSE 1983
// for j in extra_sib_deposits_locations [ Side_Positions [ i ] ] do
1927: LD_ADDR_VAR 0 3
1931: PUSH
1932: LD_EXP 55
1936: PUSH
1937: LD_EXP 44
1941: PUSH
1942: LD_VAR 0 2
1946: ARRAY
1947: ARRAY
1948: PUSH
1949: FOR_IN
1950: IFFALSE 1979
// CreateDepositXY ( j [ 1 ] , j [ 2 ] , mat_siberit ) else
1952: LD_VAR 0 3
1956: PUSH
1957: LD_INT 1
1959: ARRAY
1960: PPUSH
1961: LD_VAR 0 3
1965: PUSH
1966: LD_INT 2
1968: ARRAY
1969: PPUSH
1970: LD_INT 3
1972: PPUSH
1973: CALL_OW 62
1977: GO 1949
1979: POP
1980: POP
1981: GO 2032
// CreateDepositXY ( normal_sib_deposits_locations [ Side_Positions [ i ] ] [ 1 ] , normal_sib_deposits_locations [ Side_Positions [ i ] ] [ 2 ] , mat_siberit ) ;
1983: LD_EXP 54
1987: PUSH
1988: LD_EXP 44
1992: PUSH
1993: LD_VAR 0 2
1997: ARRAY
1998: ARRAY
1999: PUSH
2000: LD_INT 1
2002: ARRAY
2003: PPUSH
2004: LD_EXP 54
2008: PUSH
2009: LD_EXP 44
2013: PUSH
2014: LD_VAR 0 2
2018: ARRAY
2019: ARRAY
2020: PUSH
2021: LD_INT 2
2023: ARRAY
2024: PPUSH
2025: LD_INT 3
2027: PPUSH
2028: CALL_OW 62
2032: GO 1885
2034: POP
2035: POP
// end ;
2036: LD_VAR 0 1
2040: RET
// function set_shared_visions_and_alliances ; var i , j ; begin
2041: LD_INT 0
2043: PPUSH
2044: PPUSH
2045: PPUSH
// Team_Game := 0 ;
2046: LD_ADDR_EXP 48
2050: PUSH
2051: LD_INT 0
2053: ST_TO_ADDR
// for i = 1 to 8 do
2054: LD_ADDR_VAR 0 2
2058: PUSH
2059: DOUBLE
2060: LD_INT 1
2062: DEC
2063: ST_TO_ADDR
2064: LD_INT 8
2066: PUSH
2067: FOR_TO
2068: IFFALSE 2094
// Team_Game := Team_Game + Side_Teams [ i ] ;
2070: LD_ADDR_EXP 48
2074: PUSH
2075: LD_EXP 48
2079: PUSH
2080: LD_EXP 41
2084: PUSH
2085: LD_VAR 0 2
2089: ARRAY
2090: PLUS
2091: ST_TO_ADDR
2092: GO 2067
2094: POP
2095: POP
// if not Team_Game then
2096: LD_EXP 48
2100: NOT
2101: IFFALSE 2113
// Team_Game := false else
2103: LD_ADDR_EXP 48
2107: PUSH
2108: LD_INT 0
2110: ST_TO_ADDR
2111: GO 2121
// Team_Game := true ;
2113: LD_ADDR_EXP 48
2117: PUSH
2118: LD_INT 1
2120: ST_TO_ADDR
// if not Team_Game then
2121: LD_EXP 48
2125: NOT
2126: IFFALSE 2224
// begin for i = 1 to 8 do
2128: LD_ADDR_VAR 0 2
2132: PUSH
2133: DOUBLE
2134: LD_INT 1
2136: DEC
2137: ST_TO_ADDR
2138: LD_INT 8
2140: PUSH
2141: FOR_TO
2142: IFFALSE 2220
// for j = 1 to 8 do
2144: LD_ADDR_VAR 0 3
2148: PUSH
2149: DOUBLE
2150: LD_INT 1
2152: DEC
2153: ST_TO_ADDR
2154: LD_INT 8
2156: PUSH
2157: FOR_TO
2158: IFFALSE 2216
// if i <> j then
2160: LD_VAR 0 2
2164: PUSH
2165: LD_VAR 0 3
2169: NONEQUAL
2170: IFFALSE 2194
// SetAttitude ( i , j , att_neutral , true ) else
2172: LD_VAR 0 2
2176: PPUSH
2177: LD_VAR 0 3
2181: PPUSH
2182: LD_INT 0
2184: PPUSH
2185: LD_INT 1
2187: PPUSH
2188: CALL_OW 80
2192: GO 2214
// SetAttitude ( i , j , att_friend , true ) ;
2194: LD_VAR 0 2
2198: PPUSH
2199: LD_VAR 0 3
2203: PPUSH
2204: LD_INT 1
2206: PPUSH
2207: LD_INT 1
2209: PPUSH
2210: CALL_OW 80
2214: GO 2157
2216: POP
2217: POP
2218: GO 2141
2220: POP
2221: POP
// end else
2222: GO 2399
// begin if def_shared_vision then
2224: LD_EXP 9
2228: IFFALSE 2293
// begin for i in Teams do
2230: LD_ADDR_VAR 0 2
2234: PUSH
2235: LD_EXP 42
2239: PUSH
2240: FOR_IN
2241: IFFALSE 2291
// for j = 2 to i do
2243: LD_ADDR_VAR 0 3
2247: PUSH
2248: DOUBLE
2249: LD_INT 2
2251: DEC
2252: ST_TO_ADDR
2253: LD_VAR 0 2
2257: PUSH
2258: FOR_TO
2259: IFFALSE 2287
// ChangeSideFog ( i [ j ] , i [ 1 ] ) ;
2261: LD_VAR 0 2
2265: PUSH
2266: LD_VAR 0 3
2270: ARRAY
2271: PPUSH
2272: LD_VAR 0 2
2276: PUSH
2277: LD_INT 1
2279: ARRAY
2280: PPUSH
2281: CALL_OW 343
2285: GO 2258
2287: POP
2288: POP
2289: GO 2240
2291: POP
2292: POP
// end ; for i = 1 to 8 do
2293: LD_ADDR_VAR 0 2
2297: PUSH
2298: DOUBLE
2299: LD_INT 1
2301: DEC
2302: ST_TO_ADDR
2303: LD_INT 8
2305: PUSH
2306: FOR_TO
2307: IFFALSE 2397
// for j = 1 to 8 do
2309: LD_ADDR_VAR 0 3
2313: PUSH
2314: DOUBLE
2315: LD_INT 1
2317: DEC
2318: ST_TO_ADDR
2319: LD_INT 8
2321: PUSH
2322: FOR_TO
2323: IFFALSE 2393
// if Side_Teams [ i ] = Side_Teams [ j ] then
2325: LD_EXP 41
2329: PUSH
2330: LD_VAR 0 2
2334: ARRAY
2335: PUSH
2336: LD_EXP 41
2340: PUSH
2341: LD_VAR 0 3
2345: ARRAY
2346: EQUAL
2347: IFFALSE 2371
// SetAttitude ( i , j , att_friend , true ) else
2349: LD_VAR 0 2
2353: PPUSH
2354: LD_VAR 0 3
2358: PPUSH
2359: LD_INT 1
2361: PPUSH
2362: LD_INT 1
2364: PPUSH
2365: CALL_OW 80
2369: GO 2391
// SetAttitude ( i , j , att_enemy , true ) ;
2371: LD_VAR 0 2
2375: PPUSH
2376: LD_VAR 0 3
2380: PPUSH
2381: LD_INT 2
2383: PPUSH
2384: LD_INT 1
2386: PPUSH
2387: CALL_OW 80
2391: GO 2322
2393: POP
2394: POP
2395: GO 2306
2397: POP
2398: POP
// end ; end ;
2399: LD_VAR 0 1
2403: RET
// function prepare_people ( side , count , cl , x , y , r , var commander ) ; var j , i , un ; begin
2404: LD_INT 0
2406: PPUSH
2407: PPUSH
2408: PPUSH
2409: PPUSH
// result := [ ] ;
2410: LD_ADDR_VAR 0 8
2414: PUSH
2415: EMPTY
2416: ST_TO_ADDR
// for i := 1 to count do
2417: LD_ADDR_VAR 0 10
2421: PUSH
2422: DOUBLE
2423: LD_INT 1
2425: DEC
2426: ST_TO_ADDR
2427: LD_VAR 0 2
2431: PUSH
2432: FOR_TO
2433: IFFALSE 2827
// begin uc_direction := Rand ( 0 , 5 ) ;
2435: LD_ADDR_OWVAR 24
2439: PUSH
2440: LD_INT 0
2442: PPUSH
2443: LD_INT 5
2445: PPUSH
2446: CALL_OW 12
2450: ST_TO_ADDR
// if commander then
2451: LD_FROM_VAR 0 7
2455: IFFALSE 2564
// begin hc_name := mp_sides_players_names [ side ] ;
2457: LD_ADDR_OWVAR 26
2461: PUSH
2462: LD_OWVAR 19
2466: PUSH
2467: LD_VAR 0 1
2471: ARRAY
2472: ST_TO_ADDR
// PrepareHuman ( rand ( 1 , 2 ) , cl , skill_level + 2 ) ;
2473: LD_INT 1
2475: PPUSH
2476: LD_INT 2
2478: PPUSH
2479: CALL_OW 12
2483: PPUSH
2484: LD_VAR 0 3
2488: PPUSH
2489: LD_EXP 21
2493: PUSH
2494: LD_INT 2
2496: PLUS
2497: PPUSH
2498: CALL_OW 380
// hc_importance := 105 ;
2502: LD_ADDR_OWVAR 32
2506: PUSH
2507: LD_INT 105
2509: ST_TO_ADDR
// commander := false ;
2510: LD_VAR 0 7
2514: PUSH
2515: LD_INT 0
2517: ST_TO_ADDR
// if Multiplayer then
2518: LD_OWVAR 4
2522: IFFALSE 2562
// begin hc_gallery := MULTIAVATARS ;
2524: LD_ADDR_OWVAR 33
2528: PUSH
2529: LD_STRING MULTIAVATARS
2531: ST_TO_ADDR
// hc_face_number := Multiplayer_GetPlayerSideNum ( Side ) ;
2532: LD_ADDR_OWVAR 34
2536: PUSH
2537: LD_VAR 0 1
2541: PPUSH
2542: CALL_OW 525
2546: ST_TO_ADDR
// hc_sex := Multiplayer_GetPlayerSex ( Side ) ;
2547: LD_ADDR_OWVAR 27
2551: PUSH
2552: LD_VAR 0 1
2556: PPUSH
2557: CALL_OW 526
2561: ST_TO_ADDR
// end ; end else
2562: GO 2627
// begin hc_name :=  ;
2564: LD_ADDR_OWVAR 26
2568: PUSH
2569: LD_STRING 
2571: ST_TO_ADDR
// PrepareHuman ( rand ( 1 , 2 ) , cl , skill_level ) ;
2572: LD_INT 1
2574: PPUSH
2575: LD_INT 2
2577: PPUSH
2578: CALL_OW 12
2582: PPUSH
2583: LD_VAR 0 3
2587: PPUSH
2588: LD_EXP 21
2592: PPUSH
2593: CALL_OW 380
// hc_importance := 0 ;
2597: LD_ADDR_OWVAR 32
2601: PUSH
2602: LD_INT 0
2604: ST_TO_ADDR
// if Multiplayer then
2605: LD_OWVAR 4
2609: IFFALSE 2627
// begin hc_gallery :=  ;
2611: LD_ADDR_OWVAR 33
2615: PUSH
2616: LD_STRING 
2618: ST_TO_ADDR
// hc_face_number := 0 ;
2619: LD_ADDR_OWVAR 34
2623: PUSH
2624: LD_INT 0
2626: ST_TO_ADDR
// end ; end ; un := CreateHuman ;
2627: LD_ADDR_VAR 0 11
2631: PUSH
2632: CALL_OW 44
2636: ST_TO_ADDR
// if global_defined then
2637: LD_LOC 2
2641: IFFALSE 2779
// begin j := i ;
2643: LD_ADDR_VAR 0 9
2647: PUSH
2648: LD_VAR 0 10
2652: ST_TO_ADDR
// if cl = class_soldier then
2653: LD_VAR 0 3
2657: PUSH
2658: LD_INT 1
2660: EQUAL
2661: IFFALSE 2679
// j := i + soldiers_created ;
2663: LD_ADDR_VAR 0 9
2667: PUSH
2668: LD_VAR 0 10
2672: PUSH
2673: LD_LOC 3
2677: PLUS
2678: ST_TO_ADDR
// CopySkills ( global_units [ cl ] [ j ] , un ) ;
2679: LD_LOC 1
2683: PUSH
2684: LD_VAR 0 3
2688: ARRAY
2689: PUSH
2690: LD_VAR 0 9
2694: ARRAY
2695: PPUSH
2696: LD_VAR 0 11
2700: PPUSH
2701: CALL_OW 510
// SetAttr ( un , attr_speed , GetAttr ( global_units [ cl ] [ j ] , attr_speed ) ) ;
2705: LD_VAR 0 11
2709: PPUSH
2710: LD_INT 2
2712: PPUSH
2713: LD_LOC 1
2717: PUSH
2718: LD_VAR 0 3
2722: ARRAY
2723: PUSH
2724: LD_VAR 0 9
2728: ARRAY
2729: PPUSH
2730: LD_INT 2
2732: PPUSH
2733: CALL_OW 260
2737: PPUSH
2738: CALL_OW 239
// SetAttr ( un , attr_stamina , GetAttr ( global_units [ cl ] [ j ] , attr_stamina ) ) ;
2742: LD_VAR 0 11
2746: PPUSH
2747: LD_INT 1
2749: PPUSH
2750: LD_LOC 1
2754: PUSH
2755: LD_VAR 0 3
2759: ARRAY
2760: PUSH
2761: LD_VAR 0 9
2765: ARRAY
2766: PPUSH
2767: LD_INT 1
2769: PPUSH
2770: CALL_OW 260
2774: PPUSH
2775: CALL_OW 239
// end ; PlaceUnitXYR ( un , x , y , r , false ) ;
2779: LD_VAR 0 11
2783: PPUSH
2784: LD_VAR 0 4
2788: PPUSH
2789: LD_VAR 0 5
2793: PPUSH
2794: LD_VAR 0 6
2798: PPUSH
2799: LD_INT 0
2801: PPUSH
2802: CALL_OW 50
// result := result ^ [ un ] ;
2806: LD_ADDR_VAR 0 8
2810: PUSH
2811: LD_VAR 0 8
2815: PUSH
2816: LD_VAR 0 11
2820: PUSH
2821: EMPTY
2822: LIST
2823: ADD
2824: ST_TO_ADDR
// end ;
2825: GO 2432
2827: POP
2828: POP
// if not global_defined then
2829: LD_LOC 2
2833: NOT
2834: IFFALSE 2896
// if cl = class_soldier and global_units then
2836: LD_VAR 0 3
2840: PUSH
2841: LD_INT 1
2843: EQUAL
2844: PUSH
2845: LD_LOC 1
2849: AND
2850: IFFALSE 2877
// global_units := [ global_units [ 1 ] ^ result ] else
2852: LD_ADDR_LOC 1
2856: PUSH
2857: LD_LOC 1
2861: PUSH
2862: LD_INT 1
2864: ARRAY
2865: PUSH
2866: LD_VAR 0 8
2870: ADD
2871: PUSH
2872: EMPTY
2873: LIST
2874: ST_TO_ADDR
2875: GO 2896
// global_units := global_units ^ [ result ] end ;
2877: LD_ADDR_LOC 1
2881: PUSH
2882: LD_LOC 1
2886: PUSH
2887: LD_VAR 0 8
2891: PUSH
2892: EMPTY
2893: LIST
2894: ADD
2895: ST_TO_ADDR
2896: LD_VAR 0 8
2900: RET
// function prepare_side ( side ) ; var pos , x , y , dir , i , r , sol , br , dep , neng , nsci , nmech , nsol ; begin
2901: LD_INT 0
2903: PPUSH
2904: PPUSH
2905: PPUSH
2906: PPUSH
2907: PPUSH
2908: PPUSH
2909: PPUSH
2910: PPUSH
2911: PPUSH
2912: PPUSH
2913: PPUSH
2914: PPUSH
2915: PPUSH
2916: PPUSH
// Side_IsSpec := Replace ( Side_IsSpec , Side , Multiplayer_GetPlayerIsSpec ( Side ) ) ;
2917: LD_ADDR_EXP 43
2921: PUSH
2922: LD_EXP 43
2926: PPUSH
2927: LD_VAR 0 1
2931: PPUSH
2932: LD_VAR 0 1
2936: PPUSH
2937: CALL_OW 530
2941: PPUSH
2942: CALL_OW 1
2946: ST_TO_ADDR
// if Side_IsSpec [ Side ] = true then
2947: LD_EXP 43
2951: PUSH
2952: LD_VAR 0 1
2956: ARRAY
2957: PUSH
2958: LD_INT 1
2960: EQUAL
2961: IFFALSE 2965
// begin exit ;
2963: GO 4239
// end ; pos := Side_Positions [ side ] ;
2965: LD_ADDR_VAR 0 3
2969: PUSH
2970: LD_EXP 44
2974: PUSH
2975: LD_VAR 0 1
2979: ARRAY
2980: ST_TO_ADDR
// if not def_siberite_bomb then
2981: LD_EXP 16
2985: NOT
2986: IFFALSE 3023
// for i = 1 to 8 do
2988: LD_ADDR_VAR 0 7
2992: PUSH
2993: DOUBLE
2994: LD_INT 1
2996: DEC
2997: ST_TO_ADDR
2998: LD_INT 8
3000: PUSH
3001: FOR_TO
3002: IFFALSE 3021
// SetTech ( tech_SibFiss , i , state_disabled ) ;
3004: LD_INT 25
3006: PPUSH
3007: LD_VAR 0 7
3011: PPUSH
3012: LD_INT 0
3014: PPUSH
3015: CALL_OW 322
3019: GO 3001
3021: POP
3022: POP
// uc_nation := Side_Nations [ side ] ;
3023: LD_ADDR_OWVAR 21
3027: PUSH
3028: LD_EXP 45
3032: PUSH
3033: LD_VAR 0 1
3037: ARRAY
3038: ST_TO_ADDR
// uc_side := side ;
3039: LD_ADDR_OWVAR 20
3043: PUSH
3044: LD_VAR 0 1
3048: ST_TO_ADDR
// x := depot_def [ pos ] [ 1 ] ;
3049: LD_ADDR_VAR 0 4
3053: PUSH
3054: LD_EXP 49
3058: PUSH
3059: LD_VAR 0 3
3063: ARRAY
3064: PUSH
3065: LD_INT 1
3067: ARRAY
3068: ST_TO_ADDR
// y := depot_def [ pos ] [ 2 ] ;
3069: LD_ADDR_VAR 0 5
3073: PUSH
3074: LD_EXP 49
3078: PUSH
3079: LD_VAR 0 3
3083: ARRAY
3084: PUSH
3085: LD_INT 2
3087: ARRAY
3088: ST_TO_ADDR
// dir := depot_def [ pos ] [ 3 ] ;
3089: LD_ADDR_VAR 0 6
3093: PUSH
3094: LD_EXP 49
3098: PUSH
3099: LD_VAR 0 3
3103: ARRAY
3104: PUSH
3105: LD_INT 3
3107: ARRAY
3108: ST_TO_ADDR
// if is_depot then
3109: LD_EXP 18
3113: IFFALSE 3238
// begin bc_type = b_depot ;
3115: LD_ADDR_OWVAR 42
3119: PUSH
3120: LD_INT 0
3122: ST_TO_ADDR
// dep := CreateAndPlaceBuildingXYD ( x , y , Depot_Def [ pos ] [ 3 ] ) ;
3123: LD_ADDR_VAR 0 11
3127: PUSH
3128: LD_VAR 0 4
3132: PPUSH
3133: LD_VAR 0 5
3137: PPUSH
3138: LD_EXP 49
3142: PUSH
3143: LD_VAR 0 3
3147: ARRAY
3148: PUSH
3149: LD_INT 3
3151: ARRAY
3152: PPUSH
3153: CALL_OW 47
3157: ST_TO_ADDR
// SetResourceType ( GetBase ( dep ) , mat_cans , starting_resources [ mat_cans ] ) ;
3158: LD_VAR 0 11
3162: PPUSH
3163: CALL_OW 274
3167: PPUSH
3168: LD_INT 1
3170: PPUSH
3171: LD_EXP 23
3175: PUSH
3176: LD_INT 1
3178: ARRAY
3179: PPUSH
3180: CALL_OW 277
// SetResourceType ( GetBase ( dep ) , mat_oil , starting_resources [ mat_oil ] ) ;
3184: LD_VAR 0 11
3188: PPUSH
3189: CALL_OW 274
3193: PPUSH
3194: LD_INT 2
3196: PPUSH
3197: LD_EXP 23
3201: PUSH
3202: LD_INT 2
3204: ARRAY
3205: PPUSH
3206: CALL_OW 277
// SetResourceType ( GetBase ( result ) , mat_siberit , starting_resources [ mat_siberit ] ) ;
3210: LD_VAR 0 2
3214: PPUSH
3215: CALL_OW 274
3219: PPUSH
3220: LD_INT 3
3222: PPUSH
3223: LD_EXP 23
3227: PUSH
3228: LD_INT 3
3230: ARRAY
3231: PPUSH
3232: CALL_OW 277
// end else
3236: GO 3382
// begin for i := 1 to 3 do
3238: LD_ADDR_VAR 0 7
3242: PUSH
3243: DOUBLE
3244: LD_INT 1
3246: DEC
3247: ST_TO_ADDR
3248: LD_INT 3
3250: PUSH
3251: FOR_TO
3252: IFFALSE 3380
// begin r := starting_resources [ i ] ;
3254: LD_ADDR_VAR 0 8
3258: PUSH
3259: LD_EXP 23
3263: PUSH
3264: LD_VAR 0 7
3268: ARRAY
3269: ST_TO_ADDR
// while r >= 10 do
3270: LD_VAR 0 8
3274: PUSH
3275: LD_INT 10
3277: GREATEREQUAL
3278: IFFALSE 3378
// if r > 50 then
3280: LD_VAR 0 8
3284: PUSH
3285: LD_INT 50
3287: GREATER
3288: IFFALSE 3334
// begin CreateResourcesXYR ( i , 5 , x , y , 4 , false ) ;
3290: LD_VAR 0 7
3294: PPUSH
3295: LD_INT 5
3297: PPUSH
3298: LD_VAR 0 4
3302: PPUSH
3303: LD_VAR 0 5
3307: PPUSH
3308: LD_INT 4
3310: PPUSH
3311: LD_INT 0
3313: PPUSH
3314: CALL_OW 60
// r := r - 50 ;
3318: LD_ADDR_VAR 0 8
3322: PUSH
3323: LD_VAR 0 8
3327: PUSH
3328: LD_INT 50
3330: MINUS
3331: ST_TO_ADDR
// end else
3332: GO 3376
// begin CreateResourcesXYR ( i , r div 10 , x , y , 4 , false ) ;
3334: LD_VAR 0 7
3338: PPUSH
3339: LD_VAR 0 8
3343: PUSH
3344: LD_INT 10
3346: DIV
3347: PPUSH
3348: LD_VAR 0 4
3352: PPUSH
3353: LD_VAR 0 5
3357: PPUSH
3358: LD_INT 4
3360: PPUSH
3361: LD_INT 0
3363: PPUSH
3364: CALL_OW 60
// r := 0 ;
3368: LD_ADDR_VAR 0 8
3372: PUSH
3373: LD_INT 0
3375: ST_TO_ADDR
// end ;
3376: GO 3270
// end ;
3378: GO 3251
3380: POP
3381: POP
// end ; for r in starting_crates do
3382: LD_ADDR_VAR 0 8
3386: PUSH
3387: LD_EXP 22
3391: PUSH
3392: FOR_IN
3393: IFFALSE 3425
// CreateResourcesXYR ( mat_cans , 5 , x , y , r , false ) ;
3395: LD_INT 1
3397: PPUSH
3398: LD_INT 5
3400: PPUSH
3401: LD_VAR 0 4
3405: PPUSH
3406: LD_VAR 0 5
3410: PPUSH
3411: LD_VAR 0 8
3415: PPUSH
3416: LD_INT 0
3418: PPUSH
3419: CALL_OW 60
3423: GO 3392
3425: POP
3426: POP
// if def_morale_flags then
3427: LD_EXP 10
3431: IFFALSE 3582
// begin PlaceEnvironment ( ShiftX ( x , dir , 10 ) , ShiftY ( y , dir , 10 ) , 12 , 2 ) ;
3433: LD_VAR 0 4
3437: PPUSH
3438: LD_VAR 0 6
3442: PPUSH
3443: LD_INT 10
3445: PPUSH
3446: CALL_OW 272
3450: PPUSH
3451: LD_VAR 0 5
3455: PPUSH
3456: LD_VAR 0 6
3460: PPUSH
3461: LD_INT 10
3463: PPUSH
3464: CALL_OW 273
3468: PPUSH
3469: LD_INT 12
3471: PPUSH
3472: LD_INT 2
3474: PPUSH
3475: CALL_OW 349
// battle_flags_id := battle_flags_id ^ SetBattleFlag ( side , ShiftX ( x , dir , 10 ) , ShiftY ( y , dir , 10 ) , [ [ bfo_defend_bonus_human , 100 ] , [ bfo_defend_bonus_vehicle , 50 ] , [ bfo_defend_bonus_building , 20 ] , [ bfo_height , 100 ] ] ) ;
3479: LD_ADDR_EXP 30
3483: PUSH
3484: LD_EXP 30
3488: PUSH
3489: LD_VAR 0 1
3493: PPUSH
3494: LD_VAR 0 4
3498: PPUSH
3499: LD_VAR 0 6
3503: PPUSH
3504: LD_INT 10
3506: PPUSH
3507: CALL_OW 272
3511: PPUSH
3512: LD_VAR 0 5
3516: PPUSH
3517: LD_VAR 0 6
3521: PPUSH
3522: LD_INT 10
3524: PPUSH
3525: CALL_OW 273
3529: PPUSH
3530: LD_INT 1
3532: PUSH
3533: LD_INT 100
3535: PUSH
3536: EMPTY
3537: LIST
3538: LIST
3539: PUSH
3540: LD_INT 2
3542: PUSH
3543: LD_INT 50
3545: PUSH
3546: EMPTY
3547: LIST
3548: LIST
3549: PUSH
3550: LD_INT 3
3552: PUSH
3553: LD_INT 20
3555: PUSH
3556: EMPTY
3557: LIST
3558: LIST
3559: PUSH
3560: LD_INT 20
3562: PUSH
3563: LD_INT 100
3565: PUSH
3566: EMPTY
3567: LIST
3568: LIST
3569: PUSH
3570: EMPTY
3571: LIST
3572: LIST
3573: LIST
3574: LIST
3575: PPUSH
3576: CALL_OW 418
3580: ADD
3581: ST_TO_ADDR
// end ; neng := number_of_people ;
3582: LD_ADDR_VAR 0 12
3586: PUSH
3587: LD_EXP 20
3591: ST_TO_ADDR
// nsol := number_of_breastworks ;
3592: LD_ADDR_VAR 0 15
3596: PUSH
3597: LD_EXP 19
3601: ST_TO_ADDR
// if nsol < neng div 4 then
3602: LD_VAR 0 15
3606: PUSH
3607: LD_VAR 0 12
3611: PUSH
3612: LD_INT 4
3614: DIV
3615: LESS
3616: IFFALSE 3632
// nsol := neng div 4 ;
3618: LD_ADDR_VAR 0 15
3622: PUSH
3623: LD_VAR 0 12
3627: PUSH
3628: LD_INT 4
3630: DIV
3631: ST_TO_ADDR
// neng := neng - nsol ;
3632: LD_ADDR_VAR 0 12
3636: PUSH
3637: LD_VAR 0 12
3641: PUSH
3642: LD_VAR 0 15
3646: MINUS
3647: ST_TO_ADDR
// nsci := neng div 3 ;
3648: LD_ADDR_VAR 0 13
3652: PUSH
3653: LD_VAR 0 12
3657: PUSH
3658: LD_INT 3
3660: DIV
3661: ST_TO_ADDR
// if nsci < 1 then
3662: LD_VAR 0 13
3666: PUSH
3667: LD_INT 1
3669: LESS
3670: IFFALSE 3680
// nsci := 1 ;
3672: LD_ADDR_VAR 0 13
3676: PUSH
3677: LD_INT 1
3679: ST_TO_ADDR
// neng := neng - nsci ;
3680: LD_ADDR_VAR 0 12
3684: PUSH
3685: LD_VAR 0 12
3689: PUSH
3690: LD_VAR 0 13
3694: MINUS
3695: ST_TO_ADDR
// nmech := neng div 2 ;
3696: LD_ADDR_VAR 0 14
3700: PUSH
3701: LD_VAR 0 12
3705: PUSH
3706: LD_INT 2
3708: DIV
3709: ST_TO_ADDR
// neng := neng - nmech ;
3710: LD_ADDR_VAR 0 12
3714: PUSH
3715: LD_VAR 0 12
3719: PUSH
3720: LD_VAR 0 14
3724: MINUS
3725: ST_TO_ADDR
// if neng < 1 then
3726: LD_VAR 0 12
3730: PUSH
3731: LD_INT 1
3733: LESS
3734: IFFALSE 3744
// neng := 1 ;
3736: LD_ADDR_VAR 0 12
3740: PUSH
3741: LD_INT 1
3743: ST_TO_ADDR
// commander := true ;
3744: LD_ADDR_EXP 57
3748: PUSH
3749: LD_INT 1
3751: ST_TO_ADDR
// soldiers_created := 0 ;
3752: LD_ADDR_LOC 3
3756: PUSH
3757: LD_INT 0
3759: ST_TO_ADDR
// for i := 1 to number_of_breastworks do
3760: LD_ADDR_VAR 0 7
3764: PUSH
3765: DOUBLE
3766: LD_INT 1
3768: DEC
3769: ST_TO_ADDR
3770: LD_EXP 19
3774: PUSH
3775: FOR_TO
3776: IFFALSE 4030
// begin x := breastworks_def [ pos ] [ i ] [ 1 ] ;
3778: LD_ADDR_VAR 0 4
3782: PUSH
3783: LD_EXP 50
3787: PUSH
3788: LD_VAR 0 3
3792: ARRAY
3793: PUSH
3794: LD_VAR 0 7
3798: ARRAY
3799: PUSH
3800: LD_INT 1
3802: ARRAY
3803: ST_TO_ADDR
// y := breastworks_def [ pos ] [ i ] [ 2 ] ;
3804: LD_ADDR_VAR 0 5
3808: PUSH
3809: LD_EXP 50
3813: PUSH
3814: LD_VAR 0 3
3818: ARRAY
3819: PUSH
3820: LD_VAR 0 7
3824: ARRAY
3825: PUSH
3826: LD_INT 2
3828: ARRAY
3829: ST_TO_ADDR
// bc_type := b_breastwork ;
3830: LD_ADDR_OWVAR 42
3834: PUSH
3835: LD_INT 31
3837: ST_TO_ADDR
// br := CreateAndPlaceBuildingXYD ( x , y , breastworks_def [ pos ] [ i ] [ 3 ] ) ;
3838: LD_ADDR_VAR 0 10
3842: PUSH
3843: LD_VAR 0 4
3847: PPUSH
3848: LD_VAR 0 5
3852: PPUSH
3853: LD_EXP 50
3857: PUSH
3858: LD_VAR 0 3
3862: ARRAY
3863: PUSH
3864: LD_VAR 0 7
3868: ARRAY
3869: PUSH
3870: LD_INT 3
3872: ARRAY
3873: PPUSH
3874: CALL_OW 47
3878: ST_TO_ADDR
// x := ShiftX ( x , breastworks_def [ pos ] [ i ] [ 3 ] , 2 ) ;
3879: LD_ADDR_VAR 0 4
3883: PUSH
3884: LD_VAR 0 4
3888: PPUSH
3889: LD_EXP 50
3893: PUSH
3894: LD_VAR 0 3
3898: ARRAY
3899: PUSH
3900: LD_VAR 0 7
3904: ARRAY
3905: PUSH
3906: LD_INT 3
3908: ARRAY
3909: PPUSH
3910: LD_INT 2
3912: PPUSH
3913: CALL_OW 272
3917: ST_TO_ADDR
// y := ShiftY ( y , breastworks_def [ pos ] [ i ] [ 3 ] , 2 ) ;
3918: LD_ADDR_VAR 0 5
3922: PUSH
3923: LD_VAR 0 5
3927: PPUSH
3928: LD_EXP 50
3932: PUSH
3933: LD_VAR 0 3
3937: ARRAY
3938: PUSH
3939: LD_VAR 0 7
3943: ARRAY
3944: PUSH
3945: LD_INT 3
3947: ARRAY
3948: PPUSH
3949: LD_INT 2
3951: PPUSH
3952: CALL_OW 273
3956: ST_TO_ADDR
// sol := prepare_people ( side , 1 , class_soldier , x , y , 1 , commander ) [ 1 ] ;
3957: LD_ADDR_VAR 0 9
3961: PUSH
3962: LD_VAR 0 1
3966: PPUSH
3967: LD_INT 1
3969: PPUSH
3970: LD_INT 1
3972: PPUSH
3973: LD_VAR 0 4
3977: PPUSH
3978: LD_VAR 0 5
3982: PPUSH
3983: LD_INT 1
3985: PPUSH
3986: LD_ADDR_EXP 57
3990: PPUSH
3991: CALL 2404 0 7
3995: PUSH
3996: LD_INT 1
3998: ARRAY
3999: ST_TO_ADDR
// soldiers_created := soldiers_created + 1 ;
4000: LD_ADDR_LOC 3
4004: PUSH
4005: LD_LOC 3
4009: PUSH
4010: LD_INT 1
4012: PLUS
4013: ST_TO_ADDR
// ComEnterUnit ( sol , br ) ;
4014: LD_VAR 0 9
4018: PPUSH
4019: LD_VAR 0 10
4023: PPUSH
4024: CALL_OW 120
// end ;
4028: GO 3775
4030: POP
4031: POP
// x := start_def [ pos ] [ 1 ] ;
4032: LD_ADDR_VAR 0 4
4036: PUSH
4037: LD_EXP 51
4041: PUSH
4042: LD_VAR 0 3
4046: ARRAY
4047: PUSH
4048: LD_INT 1
4050: ARRAY
4051: ST_TO_ADDR
// y := start_def [ pos ] [ 2 ] ;
4052: LD_ADDR_VAR 0 5
4056: PUSH
4057: LD_EXP 51
4061: PUSH
4062: LD_VAR 0 3
4066: ARRAY
4067: PUSH
4068: LD_INT 2
4070: ARRAY
4071: ST_TO_ADDR
// prepare_people ( side , nsol - number_of_breastworks , class_soldier , x , y , 5 , commander ) ;
4072: LD_VAR 0 1
4076: PPUSH
4077: LD_VAR 0 15
4081: PUSH
4082: LD_EXP 19
4086: MINUS
4087: PPUSH
4088: LD_INT 1
4090: PPUSH
4091: LD_VAR 0 4
4095: PPUSH
4096: LD_VAR 0 5
4100: PPUSH
4101: LD_INT 5
4103: PPUSH
4104: LD_ADDR_EXP 57
4108: PPUSH
4109: CALL 2404 0 7
// prepare_people ( side , neng , class_engineer , x , y , 5 , commander ) ;
4113: LD_VAR 0 1
4117: PPUSH
4118: LD_VAR 0 12
4122: PPUSH
4123: LD_INT 2
4125: PPUSH
4126: LD_VAR 0 4
4130: PPUSH
4131: LD_VAR 0 5
4135: PPUSH
4136: LD_INT 5
4138: PPUSH
4139: LD_ADDR_EXP 57
4143: PPUSH
4144: CALL 2404 0 7
// prepare_people ( side , nmech , class_mechanic , x , y , 5 , commander ) ;
4148: LD_VAR 0 1
4152: PPUSH
4153: LD_VAR 0 14
4157: PPUSH
4158: LD_INT 3
4160: PPUSH
4161: LD_VAR 0 4
4165: PPUSH
4166: LD_VAR 0 5
4170: PPUSH
4171: LD_INT 5
4173: PPUSH
4174: LD_ADDR_EXP 57
4178: PPUSH
4179: CALL 2404 0 7
// prepare_people ( side , nsci , class_scientistic , x , y , 5 , commander ) ;
4183: LD_VAR 0 1
4187: PPUSH
4188: LD_VAR 0 13
4192: PPUSH
4193: LD_INT 4
4195: PPUSH
4196: LD_VAR 0 4
4200: PPUSH
4201: LD_VAR 0 5
4205: PPUSH
4206: LD_INT 5
4208: PPUSH
4209: LD_ADDR_EXP 57
4213: PPUSH
4214: CALL 2404 0 7
// if def_siberite_detection then
4218: LD_EXP 11
4222: IFFALSE 4239
// SetTech ( tech_SibDet , side , state_researched ) ;
4224: LD_INT 20
4226: PPUSH
4227: LD_VAR 0 1
4231: PPUSH
4232: LD_INT 2
4234: PPUSH
4235: CALL_OW 322
// end ;
4239: LD_VAR 0 2
4243: RET
// function prepare_sides ; var i ; begin
4244: LD_INT 0
4246: PPUSH
4247: PPUSH
// global_units := [ ] ;
4248: LD_ADDR_LOC 1
4252: PUSH
4253: EMPTY
4254: ST_TO_ADDR
// global_defined := false ;
4255: LD_ADDR_LOC 2
4259: PUSH
4260: LD_INT 0
4262: ST_TO_ADDR
// for i := 1 to 8 do
4263: LD_ADDR_VAR 0 2
4267: PUSH
4268: DOUBLE
4269: LD_INT 1
4271: DEC
4272: ST_TO_ADDR
4273: LD_INT 8
4275: PUSH
4276: FOR_TO
4277: IFFALSE 4302
// if Side_Positions [ i ] then
4279: LD_EXP 44
4283: PUSH
4284: LD_VAR 0 2
4288: ARRAY
4289: IFFALSE 4300
// prepare_side ( i ) ;
4291: LD_VAR 0 2
4295: PPUSH
4296: CALL 2901 0 1
4300: GO 4276
4302: POP
4303: POP
// end ;
4304: LD_VAR 0 1
4308: RET
// function prepare_specfog ; var i , x ; begin
4309: LD_INT 0
4311: PPUSH
4312: PPUSH
4313: PPUSH
// if IAmSpec then
4314: CALL_OW 531
4318: IFFALSE 4324
// TurnFogOff ;
4320: CALL_OW 537
// end ;
4324: LD_VAR 0 1
4328: RET
// starting begin FogOff ( false ) ;
4329: LD_INT 0
4331: PPUSH
4332: CALL_OW 344
// disable ( 98 ) ;
4336: LD_INT 98
4338: DISABLE_MARKED
// disable ( 99 ) ;
4339: LD_INT 99
4341: DISABLE_MARKED
// disable ( 100 ) ;
4342: LD_INT 100
4344: DISABLE_MARKED
// mp_selectmsg := true ;
4345: LD_ADDR_OWVAR 13
4349: PUSH
4350: LD_INT 1
4352: ST_TO_ADDR
// InitBloodGods ;
4353: CALL 9146 0 0
// read_multiplayer_and_game_parameters ;
4357: CALL 0 0 0
// init_respawning ;
4361: CALL 5457 0 0
// set_shared_visions_and_alliances ;
4365: CALL 2041 0 0
// prepare_sides ;
4369: CALL 4244 0 0
// init_map ;
4373: CALL 1701 0 0
// init_win_condition ;
4377: CALL 6330 0 0
// your_side := Player_Side ;
4381: LD_ADDR_OWVAR 2
4385: PUSH
4386: LD_EXP 39
4390: ST_TO_ADDR
// ResetFog ;
4391: CALL_OW 335
// prepare_specfog ;
4395: CALL 4309 0 0
// music_nat := Side_Nations [ your_side ] ;
4399: LD_ADDR_OWVAR 71
4403: PUSH
4404: LD_EXP 45
4408: PUSH
4409: LD_OWVAR 2
4413: ARRAY
4414: ST_TO_ADDR
// if IAMSpec then
4415: CALL_OW 531
4419: IFFALSE 4433
// CenterNowOnXY ( 104 , 69 ) else
4421: LD_INT 104
4423: PPUSH
4424: LD_INT 69
4426: PPUSH
4427: CALL_OW 86
4431: GO 4479
// CenterNowOnXY ( start_def [ Side_Positions [ your_side ] ] [ 1 ] , start_def [ Side_Positions [ your_side ] ] [ 2 ] ) ;
4433: LD_EXP 51
4437: PUSH
4438: LD_EXP 44
4442: PUSH
4443: LD_OWVAR 2
4447: ARRAY
4448: ARRAY
4449: PUSH
4450: LD_INT 1
4452: ARRAY
4453: PPUSH
4454: LD_EXP 51
4458: PUSH
4459: LD_EXP 44
4463: PUSH
4464: LD_OWVAR 2
4468: ARRAY
4469: ARRAY
4470: PUSH
4471: LD_INT 2
4473: ARRAY
4474: PPUSH
4475: CALL_OW 86
// Anticheatcheck ;
4479: CALL_OW 514
// end ; end_of_file
4483: END
// every 1 1$0 + 0 0$1 do
4484: GO 4486
4486: DISABLE
// begin CreateCratesAnywhere ( Rand ( 4 , 5 ) , true ) ;
4487: LD_INT 4
4489: PPUSH
4490: LD_INT 5
4492: PPUSH
4493: CALL_OW 12
4497: PPUSH
4498: LD_INT 1
4500: PPUSH
4501: CALL_OW 57
// enable ;
4505: ENABLE
// end ;
4506: END
// every 0 0$1 + 0 0$1 do var i ;
4507: GO 4509
4509: DISABLE
4510: LD_INT 0
4512: PPUSH
// begin case tick of 1 .. 1 1$0 :
4513: LD_OWVAR 1
4517: PUSH
4518: LD_INT 1
4520: DOUBLE
4521: GREATEREQUAL
4522: IFFALSE 4530
4524: LD_INT 2100
4526: DOUBLE
4527: LESSEQUAL
4528: IFTRUE 4532
4530: GO 4560
4532: POP
// Wait ( shipments_density / 100 * Rand ( 0 0$10 , 0 0$30 ) ) ; 1 1$0 + 1 .. 5 5$0 :
4533: LD_EXP 24
4537: PUSH
4538: LD_INT 100
4540: DIVREAL
4541: PUSH
4542: LD_INT 350
4544: PPUSH
4545: LD_INT 1050
4547: PPUSH
4548: CALL_OW 12
4552: MUL
4553: PPUSH
4554: CALL_OW 67
4558: GO 4862
4560: LD_INT 2100
4562: PUSH
4563: LD_INT 1
4565: PLUS
4566: DOUBLE
4567: GREATEREQUAL
4568: IFFALSE 4576
4570: LD_INT 10500
4572: DOUBLE
4573: LESSEQUAL
4574: IFTRUE 4578
4576: GO 4606
4578: POP
// Wait ( shipments_density / 100 * Rand ( 0 0$30 , 0 0$45 ) ) ; 5 5$0 + 1 .. 10 10$0 :
4579: LD_EXP 24
4583: PUSH
4584: LD_INT 100
4586: DIVREAL
4587: PUSH
4588: LD_INT 1050
4590: PPUSH
4591: LD_INT 1575
4593: PPUSH
4594: CALL_OW 12
4598: MUL
4599: PPUSH
4600: CALL_OW 67
4604: GO 4862
4606: LD_INT 10500
4608: PUSH
4609: LD_INT 1
4611: PLUS
4612: DOUBLE
4613: GREATEREQUAL
4614: IFFALSE 4622
4616: LD_INT 21000
4618: DOUBLE
4619: LESSEQUAL
4620: IFTRUE 4624
4622: GO 4652
4624: POP
// Wait ( shipments_density / 100 * Rand ( 0 0$45 , 1 1$0 ) ) ; 10 10$0 + 1 .. 20 20$0 :
4625: LD_EXP 24
4629: PUSH
4630: LD_INT 100
4632: DIVREAL
4633: PUSH
4634: LD_INT 1575
4636: PPUSH
4637: LD_INT 2100
4639: PPUSH
4640: CALL_OW 12
4644: MUL
4645: PPUSH
4646: CALL_OW 67
4650: GO 4862
4652: LD_INT 21000
4654: PUSH
4655: LD_INT 1
4657: PLUS
4658: DOUBLE
4659: GREATEREQUAL
4660: IFFALSE 4668
4662: LD_INT 42000
4664: DOUBLE
4665: LESSEQUAL
4666: IFTRUE 4670
4668: GO 4698
4670: POP
// Wait ( shipments_density / 100 * Rand ( 1 1$0 , 1 1$15 ) ) ; 20 20$0 + 1 .. 30 30$0 :
4671: LD_EXP 24
4675: PUSH
4676: LD_INT 100
4678: DIVREAL
4679: PUSH
4680: LD_INT 2100
4682: PPUSH
4683: LD_INT 2625
4685: PPUSH
4686: CALL_OW 12
4690: MUL
4691: PPUSH
4692: CALL_OW 67
4696: GO 4862
4698: LD_INT 42000
4700: PUSH
4701: LD_INT 1
4703: PLUS
4704: DOUBLE
4705: GREATEREQUAL
4706: IFFALSE 4714
4708: LD_INT 63000
4710: DOUBLE
4711: LESSEQUAL
4712: IFTRUE 4716
4714: GO 4744
4716: POP
// Wait ( shipments_density / 100 * Rand ( 1 1$15 , 1 1$30 ) ) ; 30 30$0 + 1 .. 50 50$0 :
4717: LD_EXP 24
4721: PUSH
4722: LD_INT 100
4724: DIVREAL
4725: PUSH
4726: LD_INT 2625
4728: PPUSH
4729: LD_INT 3150
4731: PPUSH
4732: CALL_OW 12
4736: MUL
4737: PPUSH
4738: CALL_OW 67
4742: GO 4862
4744: LD_INT 63000
4746: PUSH
4747: LD_INT 1
4749: PLUS
4750: DOUBLE
4751: GREATEREQUAL
4752: IFFALSE 4760
4754: LD_INT 105000
4756: DOUBLE
4757: LESSEQUAL
4758: IFTRUE 4762
4760: GO 4790
4762: POP
// Wait ( shipments_density / 100 * Rand ( 1 1$30 , 1 1$45 ) ) ; 50 50$0 + 1 .. 300 300$0 :
4763: LD_EXP 24
4767: PUSH
4768: LD_INT 100
4770: DIVREAL
4771: PUSH
4772: LD_INT 3150
4774: PPUSH
4775: LD_INT 3675
4777: PPUSH
4778: CALL_OW 12
4782: MUL
4783: PPUSH
4784: CALL_OW 67
4788: GO 4862
4790: LD_INT 105000
4792: PUSH
4793: LD_INT 1
4795: PLUS
4796: DOUBLE
4797: GREATEREQUAL
4798: IFFALSE 4806
4800: LD_INT 630000
4802: DOUBLE
4803: LESSEQUAL
4804: IFTRUE 4808
4806: GO 4836
4808: POP
// Wait ( shipments_density / 100 * Rand ( 1 1$45 , 2 2$0 ) ) ; else
4809: LD_EXP 24
4813: PUSH
4814: LD_INT 100
4816: DIVREAL
4817: PUSH
4818: LD_INT 3675
4820: PPUSH
4821: LD_INT 4200
4823: PPUSH
4824: CALL_OW 12
4828: MUL
4829: PPUSH
4830: CALL_OW 67
4834: GO 4862
4836: POP
// Wait ( shipments_density / 100 * Rand ( 2 2$0 , 2 2$30 ) ) ; end ;
4837: LD_EXP 24
4841: PUSH
4842: LD_INT 100
4844: DIVREAL
4845: PUSH
4846: LD_INT 4200
4848: PPUSH
4849: LD_INT 5250
4851: PPUSH
4852: CALL_OW 12
4856: MUL
4857: PPUSH
4858: CALL_OW 67
// for i := 1 to 8 do
4862: LD_ADDR_VAR 0 1
4866: PUSH
4867: DOUBLE
4868: LD_INT 1
4870: DEC
4871: ST_TO_ADDR
4872: LD_INT 8
4874: PUSH
4875: FOR_TO
4876: IFFALSE 4979
// if Side_Positions [ i ] <> 0 then
4878: LD_EXP 44
4882: PUSH
4883: LD_VAR 0 1
4887: ARRAY
4888: PUSH
4889: LD_INT 0
4891: NONEQUAL
4892: IFFALSE 4977
// if not Side_IsSpec [ i ] then
4894: LD_EXP 43
4898: PUSH
4899: LD_VAR 0 1
4903: ARRAY
4904: NOT
4905: IFFALSE 4977
// begin CreateCratesXYR ( Rand ( 3 , 5 ) , start_def [ Side_Positions [ i ] ] [ 1 ] , start_def [ Side_Positions [ i ] ] [ 2 ] , 20 , true ) ;
4907: LD_INT 3
4909: PPUSH
4910: LD_INT 5
4912: PPUSH
4913: CALL_OW 12
4917: PPUSH
4918: LD_EXP 51
4922: PUSH
4923: LD_EXP 44
4927: PUSH
4928: LD_VAR 0 1
4932: ARRAY
4933: ARRAY
4934: PUSH
4935: LD_INT 1
4937: ARRAY
4938: PPUSH
4939: LD_EXP 51
4943: PUSH
4944: LD_EXP 44
4948: PUSH
4949: LD_VAR 0 1
4953: ARRAY
4954: ARRAY
4955: PUSH
4956: LD_INT 2
4958: ARRAY
4959: PPUSH
4960: LD_INT 20
4962: PPUSH
4963: LD_INT 1
4965: PPUSH
4966: CALL_OW 56
// Wait ( 2 ) ;
4970: LD_INT 2
4972: PPUSH
4973: CALL_OW 67
// end ;
4977: GO 4875
4979: POP
4980: POP
// enable ;
4981: ENABLE
// end ;
4982: PPOPN 1
4984: END
// every 0 0$20 + 0 0$1 do var i , filter ;
4985: GO 4987
4987: DISABLE
4988: LD_INT 0
4990: PPUSH
4991: PPUSH
// begin if GetResourceArea ( MZBaseArea , mat_cans ) < ( ( 200 - shipments_density ) / 100 * 5 ) then
4992: LD_INT 19
4994: PPUSH
4995: LD_INT 1
4997: PPUSH
4998: CALL_OW 287
5002: PUSH
5003: LD_INT 200
5005: PUSH
5006: LD_EXP 24
5010: MINUS
5011: PUSH
5012: LD_INT 100
5014: DIVREAL
5015: PUSH
5016: LD_INT 5
5018: MUL
5019: LESS
5020: IFFALSE 5043
// CreateCratesArea ( Rand ( 3 , 5 ) , MZBaseArea , true ) ;
5022: LD_INT 3
5024: PPUSH
5025: LD_INT 5
5027: PPUSH
5028: CALL_OW 12
5032: PPUSH
5033: LD_INT 19
5035: PPUSH
5036: LD_INT 1
5038: PPUSH
5039: CALL_OW 55
// enable ;
5043: ENABLE
// end ; end_of_file
5044: PPOPN 2
5046: END
// function apeman_init ; begin
5047: LD_INT 0
5049: PPUSH
// uc_side := 0 ;
5050: LD_ADDR_OWVAR 20
5054: PUSH
5055: LD_INT 0
5057: ST_TO_ADDR
// uc_nation := nation_nature ;
5058: LD_ADDR_OWVAR 21
5062: PUSH
5063: LD_INT 0
5065: ST_TO_ADDR
// hc_class := class_apeman ;
5066: LD_ADDR_OWVAR 28
5070: PUSH
5071: LD_INT 12
5073: ST_TO_ADDR
// hc_basic_skills := [ 1 , 1 , 1 , 1 ] ;
5074: LD_ADDR_OWVAR 30
5078: PUSH
5079: LD_INT 1
5081: PUSH
5082: LD_INT 1
5084: PUSH
5085: LD_INT 1
5087: PUSH
5088: LD_INT 1
5090: PUSH
5091: EMPTY
5092: LIST
5093: LIST
5094: LIST
5095: LIST
5096: ST_TO_ADDR
// hc_skills := [ 1 , 1 , 1 , 1 ] ;
5097: LD_ADDR_OWVAR 31
5101: PUSH
5102: LD_INT 1
5104: PUSH
5105: LD_INT 1
5107: PUSH
5108: LD_INT 1
5110: PUSH
5111: LD_INT 1
5113: PUSH
5114: EMPTY
5115: LIST
5116: LIST
5117: LIST
5118: LIST
5119: ST_TO_ADDR
// hc_attr := [ 10 , 12 ] ;
5120: LD_ADDR_OWVAR 29
5124: PUSH
5125: LD_INT 10
5127: PUSH
5128: LD_INT 12
5130: PUSH
5131: EMPTY
5132: LIST
5133: LIST
5134: ST_TO_ADDR
// hc_sex := sex_male ;
5135: LD_ADDR_OWVAR 27
5139: PUSH
5140: LD_INT 1
5142: ST_TO_ADDR
// hc_importance := 0 ;
5143: LD_ADDR_OWVAR 32
5147: PUSH
5148: LD_INT 0
5150: ST_TO_ADDR
// hc_agressivity := Rand ( - 20 , 20 ) ;
5151: LD_ADDR_OWVAR 35
5155: PUSH
5156: LD_INT 20
5158: NEG
5159: PPUSH
5160: LD_INT 20
5162: PPUSH
5163: CALL_OW 12
5167: ST_TO_ADDR
// end ;
5168: LD_VAR 0 1
5172: RET
// function prepare_apemen ; var i , j , un , ape , first , d1 , d2 ; begin
5173: LD_INT 0
5175: PPUSH
5176: PPUSH
5177: PPUSH
5178: PPUSH
5179: PPUSH
5180: PPUSH
5181: PPUSH
5182: PPUSH
// if not amount_of_apemen then
5183: LD_EXP 25
5187: NOT
5188: IFFALSE 5192
// exit ;
5190: GO 5444
// ape := 0 ;
5192: LD_ADDR_VAR 0 5
5196: PUSH
5197: LD_INT 0
5199: ST_TO_ADDR
// repeat Wait ( ( ape + 1 ) * Rand ( 0 0$10 , 1 1$0 ) ) ;
5200: LD_VAR 0 5
5204: PUSH
5205: LD_INT 1
5207: PLUS
5208: PUSH
5209: LD_INT 350
5211: PPUSH
5212: LD_INT 2100
5214: PPUSH
5215: CALL_OW 12
5219: MUL
5220: PPUSH
5221: CALL_OW 67
// apeman_init ;
5225: CALL 5047 0 0
// for i := 1 to 6 do
5229: LD_ADDR_VAR 0 2
5233: PUSH
5234: DOUBLE
5235: LD_INT 1
5237: DEC
5238: ST_TO_ADDR
5239: LD_INT 6
5241: PUSH
5242: FOR_TO
5243: IFFALSE 5416
// begin case i of 1 :
5245: LD_VAR 0 2
5249: PUSH
5250: LD_INT 1
5252: DOUBLE
5253: EQUAL
5254: IFTRUE 5258
5256: GO 5276
5258: POP
// PlaceUnitArea ( CreateHuman , Base1ApeArea , false ) ; 2 :
5259: CALL_OW 44
5263: PPUSH
5264: LD_INT 4
5266: PPUSH
5267: LD_INT 0
5269: PPUSH
5270: CALL_OW 49
5274: GO 5407
5276: LD_INT 2
5278: DOUBLE
5279: EQUAL
5280: IFTRUE 5284
5282: GO 5302
5284: POP
// PlaceUnitArea ( CreateHuman , Base2ApeArea , false ) ; 3 :
5285: CALL_OW 44
5289: PPUSH
5290: LD_INT 3
5292: PPUSH
5293: LD_INT 0
5295: PPUSH
5296: CALL_OW 49
5300: GO 5407
5302: LD_INT 3
5304: DOUBLE
5305: EQUAL
5306: IFTRUE 5310
5308: GO 5328
5310: POP
// PlaceUnitArea ( CreateHuman , Base3ApeArea , false ) ; 4 :
5311: CALL_OW 44
5315: PPUSH
5316: LD_INT 1
5318: PPUSH
5319: LD_INT 0
5321: PPUSH
5322: CALL_OW 49
5326: GO 5407
5328: LD_INT 4
5330: DOUBLE
5331: EQUAL
5332: IFTRUE 5336
5334: GO 5354
5336: POP
// PlaceUnitArea ( CreateHuman , Base4ApeArea , false ) ; 5 :
5337: CALL_OW 44
5341: PPUSH
5342: LD_INT 2
5344: PPUSH
5345: LD_INT 0
5347: PPUSH
5348: CALL_OW 49
5352: GO 5407
5354: LD_INT 5
5356: DOUBLE
5357: EQUAL
5358: IFTRUE 5362
5360: GO 5380
5362: POP
// PlaceUnitArea ( CreateHuman , Base5ApeArea , false ) ; 6 :
5363: CALL_OW 44
5367: PPUSH
5368: LD_INT 5
5370: PPUSH
5371: LD_INT 0
5373: PPUSH
5374: CALL_OW 49
5378: GO 5407
5380: LD_INT 6
5382: DOUBLE
5383: EQUAL
5384: IFTRUE 5388
5386: GO 5406
5388: POP
// PlaceUnitArea ( CreateHuman , Base6ApeArea , false ) ; end ;
5389: CALL_OW 44
5393: PPUSH
5394: LD_INT 6
5396: PPUSH
5397: LD_INT 0
5399: PPUSH
5400: CALL_OW 49
5404: GO 5407
5406: POP
// Wait ( 3 ) ;
5407: LD_INT 3
5409: PPUSH
5410: CALL_OW 67
// end ;
5414: GO 5242
5416: POP
5417: POP
// ape := ape + 1 ;
5418: LD_ADDR_VAR 0 5
5422: PUSH
5423: LD_VAR 0 5
5427: PUSH
5428: LD_INT 1
5430: PLUS
5431: ST_TO_ADDR
// until ape >= amount_of_apemen ;
5432: LD_VAR 0 5
5436: PUSH
5437: LD_EXP 25
5441: GREATEREQUAL
5442: IFFALSE 5200
// end ;
5444: LD_VAR 0 1
5448: RET
// every 0 0$15 do
5449: GO 5451
5451: DISABLE
// begin prepare_apemen ;
5452: CALL 5173 0 0
// end ; end_of_file
5456: END
// var respawn , inqueue ; export function init_respawning ; begin
5457: LD_INT 0
5459: PPUSH
// respawn := Rand ( 1 , 8 ) ;
5460: LD_ADDR_LOC 4
5464: PUSH
5465: LD_INT 1
5467: PPUSH
5468: LD_INT 8
5470: PPUSH
5471: CALL_OW 12
5475: ST_TO_ADDR
// inqueue := [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] ;
5476: LD_ADDR_LOC 5
5480: PUSH
5481: LD_INT 0
5483: PUSH
5484: LD_INT 0
5486: PUSH
5487: LD_INT 0
5489: PUSH
5490: LD_INT 0
5492: PUSH
5493: LD_INT 0
5495: PUSH
5496: LD_INT 0
5498: PUSH
5499: LD_INT 0
5501: PUSH
5502: LD_INT 0
5504: PUSH
5505: EMPTY
5506: LIST
5507: LIST
5508: LIST
5509: LIST
5510: LIST
5511: LIST
5512: LIST
5513: LIST
5514: ST_TO_ADDR
// end ;
5515: LD_VAR 0 1
5519: RET
// every 0 0$1 + 0 0$1 do var n , dep , aktresp ;
5520: GO 5522
5522: DISABLE
5523: LD_INT 0
5525: PPUSH
5526: PPUSH
5527: PPUSH
// begin if respawning_time_max = 0 then
5528: LD_EXP 28
5532: PUSH
5533: LD_INT 0
5535: EQUAL
5536: IFFALSE 5540
// exit ;
5538: GO 5945
// if respawn = 8 then
5540: LD_LOC 4
5544: PUSH
5545: LD_INT 8
5547: EQUAL
5548: IFFALSE 5560
// respawn := 1 else
5550: LD_ADDR_LOC 4
5554: PUSH
5555: LD_INT 1
5557: ST_TO_ADDR
5558: GO 5574
// respawn := respawn + 1 ;
5560: LD_ADDR_LOC 4
5564: PUSH
5565: LD_LOC 4
5569: PUSH
5570: LD_INT 1
5572: PLUS
5573: ST_TO_ADDR
// if Side_Positions [ respawn ] and not inqueue [ respawn ] then
5574: LD_EXP 44
5578: PUSH
5579: LD_LOC 4
5583: ARRAY
5584: PUSH
5585: LD_LOC 5
5589: PUSH
5590: LD_LOC 4
5594: ARRAY
5595: NOT
5596: AND
5597: IFFALSE 5944
// begin n := FilterAllUnits ( [ [ f_type , unit_human ] , [ f_side , respawn ] , f_not , [ f_nation , nation_nature ] ] ) ;
5599: LD_ADDR_VAR 0 1
5603: PUSH
5604: LD_INT 21
5606: PUSH
5607: LD_INT 1
5609: PUSH
5610: EMPTY
5611: LIST
5612: LIST
5613: PUSH
5614: LD_INT 22
5616: PUSH
5617: LD_LOC 4
5621: PUSH
5622: EMPTY
5623: LIST
5624: LIST
5625: PUSH
5626: LD_INT 3
5628: PUSH
5629: LD_INT 23
5631: PUSH
5632: LD_INT 0
5634: PUSH
5635: EMPTY
5636: LIST
5637: LIST
5638: PUSH
5639: EMPTY
5640: LIST
5641: LIST
5642: LIST
5643: LIST
5644: PPUSH
5645: CALL_OW 69
5649: ST_TO_ADDR
// if n < number_of_people then
5650: LD_VAR 0 1
5654: PUSH
5655: LD_EXP 20
5659: LESS
5660: IFFALSE 5941
// begin dep := FilterAllUnits ( [ [ f_type , unit_building ] , [ f_or , [ f_btype , b_depot ] , [ f_btype , b_warehouse ] ] , [ f_ok ] , [ f_side , respawn ] ] ) ;
5662: LD_ADDR_VAR 0 2
5666: PUSH
5667: LD_INT 21
5669: PUSH
5670: LD_INT 3
5672: PUSH
5673: EMPTY
5674: LIST
5675: LIST
5676: PUSH
5677: LD_INT 2
5679: PUSH
5680: LD_INT 30
5682: PUSH
5683: LD_INT 0
5685: PUSH
5686: EMPTY
5687: LIST
5688: LIST
5689: PUSH
5690: LD_INT 30
5692: PUSH
5693: LD_INT 1
5695: PUSH
5696: EMPTY
5697: LIST
5698: LIST
5699: PUSH
5700: EMPTY
5701: LIST
5702: LIST
5703: LIST
5704: PUSH
5705: LD_INT 50
5707: PUSH
5708: EMPTY
5709: LIST
5710: PUSH
5711: LD_INT 22
5713: PUSH
5714: LD_LOC 4
5718: PUSH
5719: EMPTY
5720: LIST
5721: LIST
5722: PUSH
5723: EMPTY
5724: LIST
5725: LIST
5726: LIST
5727: LIST
5728: PPUSH
5729: CALL_OW 69
5733: ST_TO_ADDR
// if dep then
5734: LD_VAR 0 2
5738: IFFALSE 5938
// begin aktresp := respawn ;
5740: LD_ADDR_VAR 0 3
5744: PUSH
5745: LD_LOC 4
5749: ST_TO_ADDR
// inqueue := Replace ( inqueue , aktresp , true ) ;
5750: LD_ADDR_LOC 5
5754: PUSH
5755: LD_LOC 5
5759: PPUSH
5760: LD_VAR 0 3
5764: PPUSH
5765: LD_INT 1
5767: PPUSH
5768: CALL_OW 1
5772: ST_TO_ADDR
// enable ;
5773: ENABLE
// wait ( rand ( respawning_time_min , respawning_time_max ) ) ;
5774: LD_EXP 27
5778: PPUSH
5779: LD_EXP 28
5783: PPUSH
5784: CALL_OW 12
5788: PPUSH
5789: CALL_OW 67
// inqueue := Replace ( inqueue , aktresp , false ) ;
5793: LD_ADDR_LOC 5
5797: PUSH
5798: LD_LOC 5
5802: PPUSH
5803: LD_VAR 0 3
5807: PPUSH
5808: LD_INT 0
5810: PPUSH
5811: CALL_OW 1
5815: ST_TO_ADDR
// hc_name :=  ;
5816: LD_ADDR_OWVAR 26
5820: PUSH
5821: LD_STRING 
5823: ST_TO_ADDR
// hc_importance := 0 ;
5824: LD_ADDR_OWVAR 32
5828: PUSH
5829: LD_INT 0
5831: ST_TO_ADDR
// PrepareHuman ( 0 , 0 , skill_level div 2 ) ;
5832: LD_INT 0
5834: PPUSH
5835: LD_INT 0
5837: PPUSH
5838: LD_EXP 21
5842: PUSH
5843: LD_INT 2
5845: DIV
5846: PPUSH
5847: CALL_OW 380
// uc_nation := Side_Nations [ aktresp ] ;
5851: LD_ADDR_OWVAR 21
5855: PUSH
5856: LD_EXP 45
5860: PUSH
5861: LD_VAR 0 3
5865: ARRAY
5866: ST_TO_ADDR
// uc_side := aktresp ;
5867: LD_ADDR_OWVAR 20
5871: PUSH
5872: LD_VAR 0 3
5876: ST_TO_ADDR
// dep := dep [ Rand ( 1 , dep ) ] ;
5877: LD_ADDR_VAR 0 2
5881: PUSH
5882: LD_VAR 0 2
5886: PUSH
5887: LD_INT 1
5889: PPUSH
5890: LD_VAR 0 2
5894: PPUSH
5895: CALL_OW 12
5899: ARRAY
5900: ST_TO_ADDR
// PlaceUnitXYR ( CreateHuman , GetX ( dep ) , GetY ( dep ) , 7 , true ) ;
5901: CALL_OW 44
5905: PPUSH
5906: LD_VAR 0 2
5910: PPUSH
5911: CALL_OW 250
5915: PPUSH
5916: LD_VAR 0 2
5920: PPUSH
5921: CALL_OW 251
5925: PPUSH
5926: LD_INT 7
5928: PPUSH
5929: LD_INT 1
5931: PPUSH
5932: CALL_OW 50
// end else
5936: GO 5939
// enable ;
5938: ENABLE
// end else
5939: GO 5942
// enable ;
5941: ENABLE
// end else
5942: GO 5945
// enable ;
5944: ENABLE
// end ; end_of_file
5945: PPOPN 3
5947: END
// function DisplayNames ; var i ; begin
5948: LD_INT 0
5950: PPUSH
5951: PPUSH
// for i in FilterAllUnits ( [ f_or , [ f_btype , b_depot ] , [ f_btype , b_warehouse ] ] ) do
5952: LD_ADDR_VAR 0 2
5956: PUSH
5957: LD_INT 2
5959: PUSH
5960: LD_INT 30
5962: PUSH
5963: LD_INT 0
5965: PUSH
5966: EMPTY
5967: LIST
5968: LIST
5969: PUSH
5970: LD_INT 30
5972: PUSH
5973: LD_INT 1
5975: PUSH
5976: EMPTY
5977: LIST
5978: LIST
5979: PUSH
5980: EMPTY
5981: LIST
5982: LIST
5983: LIST
5984: PPUSH
5985: CALL_OW 69
5989: PUSH
5990: FOR_IN
5991: IFFALSE 6018
// SetBName ( i , @ & GetSide ( i ) ) ;
5993: LD_VAR 0 2
5997: PPUSH
5998: LD_STRING @
6000: PUSH
6001: LD_VAR 0 2
6005: PPUSH
6006: CALL_OW 255
6010: STR
6011: PPUSH
6012: CALL_OW 500
6016: GO 5990
6018: POP
6019: POP
// end ;
6020: LD_VAR 0 1
6024: RET
// on BuildingComplete ( b ) do DisplayNames ;
6025: CALL 5948 0 0
6029: PPOPN 1
6031: END
// on BuildingStarted ( b , h ) do DisplayNames ;
6032: CALL 5948 0 0
6036: PPOPN 2
6038: END
// on BuildingCaptured ( b , o , e ) do DisplayNames ;
6039: CALL 5948 0 0
6043: PPOPN 3
6045: END
// every 5 do
6046: GO 6048
6048: DISABLE
// DisplayNames ;
6049: CALL 5948 0 0
6053: END
// on UnitDestroyed ( j ) do var x , y , pos , dir ;
6054: LD_INT 0
6056: PPUSH
6057: PPUSH
6058: PPUSH
6059: PPUSH
// begin if getBType ( j ) in [ b_depot , b_warehouse ] then
6060: LD_VAR 0 1
6064: PPUSH
6065: CALL_OW 266
6069: PUSH
6070: LD_INT 0
6072: PUSH
6073: LD_INT 1
6075: PUSH
6076: EMPTY
6077: LIST
6078: LIST
6079: IN
6080: IFFALSE 6208
// begin pos := Side_Positions [ GetSide ( j ) ] ;
6082: LD_ADDR_VAR 0 4
6086: PUSH
6087: LD_EXP 44
6091: PUSH
6092: LD_VAR 0 1
6096: PPUSH
6097: CALL_OW 255
6101: ARRAY
6102: ST_TO_ADDR
// x := depot_def [ pos ] [ 1 ] ;
6103: LD_ADDR_VAR 0 2
6107: PUSH
6108: LD_EXP 49
6112: PUSH
6113: LD_VAR 0 4
6117: ARRAY
6118: PUSH
6119: LD_INT 1
6121: ARRAY
6122: ST_TO_ADDR
// y := depot_def [ pos ] [ 2 ] ;
6123: LD_ADDR_VAR 0 3
6127: PUSH
6128: LD_EXP 49
6132: PUSH
6133: LD_VAR 0 4
6137: ARRAY
6138: PUSH
6139: LD_INT 2
6141: ARRAY
6142: ST_TO_ADDR
// dir := depot_def [ pos ] [ 3 ] ;
6143: LD_ADDR_VAR 0 5
6147: PUSH
6148: LD_EXP 49
6152: PUSH
6153: LD_VAR 0 4
6157: ARRAY
6158: PUSH
6159: LD_INT 3
6161: ARRAY
6162: ST_TO_ADDR
// KillBattleFlag ( FindBattleFlag ( ShiftX ( x , dir , 10 ) , ShiftY ( y , dir , 10 ) ) ) ;
6163: LD_VAR 0 2
6167: PPUSH
6168: LD_VAR 0 5
6172: PPUSH
6173: LD_INT 10
6175: PPUSH
6176: CALL_OW 272
6180: PPUSH
6181: LD_VAR 0 3
6185: PPUSH
6186: LD_VAR 0 5
6190: PPUSH
6191: LD_INT 10
6193: PPUSH
6194: CALL_OW 273
6198: PPUSH
6199: CALL_OW 420
6203: PPUSH
6204: CALL_OW 419
// end ; end ; end_of_file
6208: PPOPN 5
6210: END
// export clearedfog ; export function CanWinLoose ; begin
6211: LD_INT 0
6213: PPUSH
// Result := false ;
6214: LD_ADDR_VAR 0 1
6218: PUSH
6219: LD_INT 0
6221: ST_TO_ADDR
// if ( not IAmServer and ( ( EnemyCount = 0 ) or ( ( FriendsCount = 0 ) and ( TeamsCount < 2 ) ) ) ) then
6222: CALL_OW 518
6226: NOT
6227: PUSH
6228: CALL_OW 522
6232: PUSH
6233: LD_INT 0
6235: EQUAL
6236: PUSH
6237: CALL_OW 523
6241: PUSH
6242: LD_INT 0
6244: EQUAL
6245: PUSH
6246: CALL_OW 524
6250: PUSH
6251: LD_INT 2
6253: LESS
6254: AND
6255: OR
6256: AND
6257: IFFALSE 6267
// Result := true ;
6259: LD_ADDR_VAR 0 1
6263: PUSH
6264: LD_INT 1
6266: ST_TO_ADDR
// if ( IAmServer and ( PlayerCount = 0 ) ) then
6267: CALL_OW 518
6271: PUSH
6272: CALL_OW 519
6276: PUSH
6277: LD_INT 0
6279: EQUAL
6280: AND
6281: IFFALSE 6291
// Result := true ;
6283: LD_ADDR_VAR 0 1
6287: PUSH
6288: LD_INT 1
6290: ST_TO_ADDR
// if ( IAmSpec ) then
6291: CALL_OW 531
6295: IFFALSE 6325
// if ( PlayerCount <= 1 ) then
6297: CALL_OW 519
6301: PUSH
6302: LD_INT 1
6304: LESSEQUAL
6305: IFFALSE 6317
// Result := true else
6307: LD_ADDR_VAR 0 1
6311: PUSH
6312: LD_INT 1
6314: ST_TO_ADDR
6315: GO 6325
// Result := false ;
6317: LD_ADDR_VAR 0 1
6321: PUSH
6322: LD_INT 0
6324: ST_TO_ADDR
// end ;
6325: LD_VAR 0 1
6329: RET
// export function init_win_condition ; begin
6330: LD_INT 0
6332: PPUSH
// case Game_Type of 1 , 2 , 4 :
6333: LD_EXP 1
6337: PUSH
6338: LD_INT 1
6340: DOUBLE
6341: EQUAL
6342: IFTRUE 6358
6344: LD_INT 2
6346: DOUBLE
6347: EQUAL
6348: IFTRUE 6358
6350: LD_INT 4
6352: DOUBLE
6353: EQUAL
6354: IFTRUE 6358
6356: GO 6375
6358: POP
// if Team_Game then
6359: LD_EXP 48
6363: IFFALSE 6370
// enable ( 98 ) else
6365: LD_INT 98
6367: ENABLE_MARKED
6368: GO 6373
// enable ( 99 ) ; 3 :
6370: LD_INT 99
6372: ENABLE_MARKED
6373: GO 6420
6375: LD_INT 3
6377: DOUBLE
6378: EQUAL
6379: IFTRUE 6383
6381: GO 6399
6383: POP
// begin Wait ( 0 0$5 ) ;
6384: LD_INT 175
6386: PPUSH
6387: CALL_OW 67
// enable ( 99 ) ;
6391: LD_INT 99
6393: ENABLE_MARKED
// enable ( 100 ) ;
6394: LD_INT 100
6396: ENABLE_MARKED
// end ; 10 , 11 :
6397: GO 6420
6399: LD_INT 10
6401: DOUBLE
6402: EQUAL
6403: IFTRUE 6413
6405: LD_INT 11
6407: DOUBLE
6408: EQUAL
6409: IFTRUE 6413
6411: GO 6419
6413: POP
// begin enable ( 101 ) ;
6414: LD_INT 101
6416: ENABLE_MARKED
// end ; end ;
6417: GO 6420
6419: POP
// end ;
6420: LD_VAR 0 1
6424: RET
// every 0 0$2 marked 98 do var win , i ;
6425: GO 6427
6427: DISABLE
6428: LD_INT 0
6430: PPUSH
6431: PPUSH
// begin if CanWinLoose then
6432: CALL 6211 0 0
6436: IFFALSE 6650
// if your_side then
6438: LD_OWVAR 2
6442: IFFALSE 6650
// if not FilterAllUnits ( [ [ f_side , your_side ] , [ f_or , [ f_type , unit_human ] , [ f_btype , b_depot ] , [ f_btype , b_warehouse ] ] ] ) then
6444: LD_INT 22
6446: PUSH
6447: LD_OWVAR 2
6451: PUSH
6452: EMPTY
6453: LIST
6454: LIST
6455: PUSH
6456: LD_INT 2
6458: PUSH
6459: LD_INT 21
6461: PUSH
6462: LD_INT 1
6464: PUSH
6465: EMPTY
6466: LIST
6467: LIST
6468: PUSH
6469: LD_INT 30
6471: PUSH
6472: LD_INT 0
6474: PUSH
6475: EMPTY
6476: LIST
6477: LIST
6478: PUSH
6479: LD_INT 30
6481: PUSH
6482: LD_INT 1
6484: PUSH
6485: EMPTY
6486: LIST
6487: LIST
6488: PUSH
6489: EMPTY
6490: LIST
6491: LIST
6492: LIST
6493: LIST
6494: PUSH
6495: EMPTY
6496: LIST
6497: LIST
6498: PPUSH
6499: CALL_OW 69
6503: NOT
6504: IFFALSE 6521
// begin wait ( 0 0$3 ) ;
6506: LD_INT 105
6508: PPUSH
6509: CALL_OW 67
// YouLostInMultiplayer ;
6513: CALL_OW 107
// exit ;
6517: GO 6651
// end else
6519: GO 6650
// begin win := true ;
6521: LD_ADDR_VAR 0 1
6525: PUSH
6526: LD_INT 1
6528: ST_TO_ADDR
// for i = 1 to Side_positions do
6529: LD_ADDR_VAR 0 2
6533: PUSH
6534: DOUBLE
6535: LD_INT 1
6537: DEC
6538: ST_TO_ADDR
6539: LD_EXP 44
6543: PUSH
6544: FOR_TO
6545: IFFALSE 6629
// if Side_positions [ i ] and ( i <> your_side ) and MultiplayerSideAlive ( i ) then
6547: LD_EXP 44
6551: PUSH
6552: LD_VAR 0 2
6556: ARRAY
6557: PUSH
6558: LD_VAR 0 2
6562: PUSH
6563: LD_OWVAR 2
6567: NONEQUAL
6568: AND
6569: PUSH
6570: LD_VAR 0 2
6574: PPUSH
6575: CALL_OW 108
6579: AND
6580: IFFALSE 6627
// begin if not Side_Teams [ i ] or ( Side_Teams [ i ] <> Side_Teams [ your_side ] ) then
6582: LD_EXP 41
6586: PUSH
6587: LD_VAR 0 2
6591: ARRAY
6592: NOT
6593: PUSH
6594: LD_EXP 41
6598: PUSH
6599: LD_VAR 0 2
6603: ARRAY
6604: PUSH
6605: LD_EXP 41
6609: PUSH
6610: LD_OWVAR 2
6614: ARRAY
6615: NONEQUAL
6616: OR
6617: IFFALSE 6627
// win := false ;
6619: LD_ADDR_VAR 0 1
6623: PUSH
6624: LD_INT 0
6626: ST_TO_ADDR
// end ;
6627: GO 6544
6629: POP
6630: POP
// if win then
6631: LD_VAR 0 1
6635: IFFALSE 6650
// begin wait ( 0 0$3 ) ;
6637: LD_INT 105
6639: PPUSH
6640: CALL_OW 67
// YouWinInMultiplayer ;
6644: CALL_OW 106
// exit ;
6648: GO 6651
// end ; end ; enable ;
6650: ENABLE
// end ;
6651: PPOPN 2
6653: END
// every 0 0$3 marked 99 do var win , i ;
6654: GO 6656
6656: DISABLE
6657: LD_INT 0
6659: PPUSH
6660: PPUSH
// begin if CanWinLoose then
6661: CALL 6211 0 0
6665: IFFALSE 6853
// if not FilterAllUnits ( [ [ f_side , your_side ] , [ f_or , [ f_type , unit_human ] , [ f_btype , b_depot ] , [ f_btype , b_warehouse ] ] ] ) then
6667: LD_INT 22
6669: PUSH
6670: LD_OWVAR 2
6674: PUSH
6675: EMPTY
6676: LIST
6677: LIST
6678: PUSH
6679: LD_INT 2
6681: PUSH
6682: LD_INT 21
6684: PUSH
6685: LD_INT 1
6687: PUSH
6688: EMPTY
6689: LIST
6690: LIST
6691: PUSH
6692: LD_INT 30
6694: PUSH
6695: LD_INT 0
6697: PUSH
6698: EMPTY
6699: LIST
6700: LIST
6701: PUSH
6702: LD_INT 30
6704: PUSH
6705: LD_INT 1
6707: PUSH
6708: EMPTY
6709: LIST
6710: LIST
6711: PUSH
6712: EMPTY
6713: LIST
6714: LIST
6715: LIST
6716: LIST
6717: PUSH
6718: EMPTY
6719: LIST
6720: LIST
6721: PPUSH
6722: CALL_OW 69
6726: NOT
6727: IFFALSE 6744
// begin wait ( 0 0$3 ) ;
6729: LD_INT 105
6731: PPUSH
6732: CALL_OW 67
// YouLostInMultiplayer ;
6736: CALL_OW 107
// exit ;
6740: GO 6854
// end else
6742: GO 6853
// begin win := true ;
6744: LD_ADDR_VAR 0 1
6748: PUSH
6749: LD_INT 1
6751: ST_TO_ADDR
// for i = 1 to Side_Positions do
6752: LD_ADDR_VAR 0 2
6756: PUSH
6757: DOUBLE
6758: LD_INT 1
6760: DEC
6761: ST_TO_ADDR
6762: LD_EXP 44
6766: PUSH
6767: FOR_TO
6768: IFFALSE 6832
// if Side_Positions [ i ] and ( i <> your_side ) and MultiplayerSideAlive ( i ) then
6770: LD_EXP 44
6774: PUSH
6775: LD_VAR 0 2
6779: ARRAY
6780: PUSH
6781: LD_VAR 0 2
6785: PUSH
6786: LD_OWVAR 2
6790: NONEQUAL
6791: AND
6792: PUSH
6793: LD_VAR 0 2
6797: PPUSH
6798: CALL_OW 108
6802: AND
6803: IFFALSE 6830
// if not AlliedSides ( i , your_side ) then
6805: LD_VAR 0 2
6809: PPUSH
6810: LD_OWVAR 2
6814: PPUSH
6815: CALL 7100 0 2
6819: NOT
6820: IFFALSE 6830
// win := false ;
6822: LD_ADDR_VAR 0 1
6826: PUSH
6827: LD_INT 0
6829: ST_TO_ADDR
6830: GO 6767
6832: POP
6833: POP
// if win then
6834: LD_VAR 0 1
6838: IFFALSE 6853
// begin wait ( 0 0$3 ) ;
6840: LD_INT 105
6842: PPUSH
6843: CALL_OW 67
// YouWinInMultiplayer ;
6847: CALL_OW 106
// exit ;
6851: GO 6854
// end ; end ; enable ;
6853: ENABLE
// end ;
6854: PPOPN 2
6856: END
// every 0 0$3 marked 101 do var win , i ;
6857: GO 6859
6859: DISABLE
6860: LD_INT 0
6862: PPUSH
6863: PPUSH
// begin if not FilterAllUnits ( [ [ f_side , your_side ] , [ f_or , [ f_type , unit_human ] , [ f_btype , b_depot ] , [ f_btype , b_warehouse ] ] ] ) then
6864: LD_INT 22
6866: PUSH
6867: LD_OWVAR 2
6871: PUSH
6872: EMPTY
6873: LIST
6874: LIST
6875: PUSH
6876: LD_INT 2
6878: PUSH
6879: LD_INT 21
6881: PUSH
6882: LD_INT 1
6884: PUSH
6885: EMPTY
6886: LIST
6887: LIST
6888: PUSH
6889: LD_INT 30
6891: PUSH
6892: LD_INT 0
6894: PUSH
6895: EMPTY
6896: LIST
6897: LIST
6898: PUSH
6899: LD_INT 30
6901: PUSH
6902: LD_INT 1
6904: PUSH
6905: EMPTY
6906: LIST
6907: LIST
6908: PUSH
6909: EMPTY
6910: LIST
6911: LIST
6912: LIST
6913: LIST
6914: PUSH
6915: EMPTY
6916: LIST
6917: LIST
6918: PPUSH
6919: CALL_OW 69
6923: NOT
6924: IFFALSE 6978
// begin wait ( 0 0$3 ) ;
6926: LD_INT 105
6928: PPUSH
6929: CALL_OW 67
// if CanWinLoose then
6933: CALL 6211 0 0
6937: IFFALSE 6945
// YouLostInMultiplayer else
6939: CALL_OW 107
6943: GO 6974
// begin if not clearedfog then
6945: LD_EXP 58
6949: NOT
6950: IFFALSE 6973
// begin ClearAllFogForSide ( your_side ) ;
6952: LD_OWVAR 2
6956: PPUSH
6957: CALL_OW 520
// clearedfog := true ;
6961: LD_ADDR_EXP 58
6965: PUSH
6966: LD_INT 1
6968: ST_TO_ADDR
// Multiplayer_Loose_Message ;
6969: CALL_OW 521
// end ; enable ;
6973: ENABLE
// end ; exit ;
6974: GO 7097
// end else
6976: GO 7096
// begin win := true ;
6978: LD_ADDR_VAR 0 1
6982: PUSH
6983: LD_INT 1
6985: ST_TO_ADDR
// for i = 1 to Side_Positions do
6986: LD_ADDR_VAR 0 2
6990: PUSH
6991: DOUBLE
6992: LD_INT 1
6994: DEC
6995: ST_TO_ADDR
6996: LD_EXP 44
7000: PUSH
7001: FOR_TO
7002: IFFALSE 7066
// if Side_Positions [ i ] and ( i <> your_side ) and MultiplayerSideAlive ( i ) then
7004: LD_EXP 44
7008: PUSH
7009: LD_VAR 0 2
7013: ARRAY
7014: PUSH
7015: LD_VAR 0 2
7019: PUSH
7020: LD_OWVAR 2
7024: NONEQUAL
7025: AND
7026: PUSH
7027: LD_VAR 0 2
7031: PPUSH
7032: CALL_OW 108
7036: AND
7037: IFFALSE 7064
// if not AlliedSides ( i , your_side ) then
7039: LD_VAR 0 2
7043: PPUSH
7044: LD_OWVAR 2
7048: PPUSH
7049: CALL 7100 0 2
7053: NOT
7054: IFFALSE 7064
// win := false ;
7056: LD_ADDR_VAR 0 1
7060: PUSH
7061: LD_INT 0
7063: ST_TO_ADDR
7064: GO 7001
7066: POP
7067: POP
// if win then
7068: LD_VAR 0 1
7072: IFFALSE 7096
// begin wait ( 0 0$3 ) ;
7074: LD_INT 105
7076: PPUSH
7077: CALL_OW 67
// if CanWinLoose then
7081: CALL 6211 0 0
7085: IFFALSE 7093
// YouWinInMultiplayer else
7087: CALL_OW 106
7091: GO 7094
// enable ;
7093: ENABLE
// exit ;
7094: GO 7097
// end ; end ; enable ;
7096: ENABLE
// end ;
7097: PPOPN 2
7099: END
// function AlliedSides ( i , j ) ; var vysledek ; begin
7100: LD_INT 0
7102: PPUSH
7103: PPUSH
// vysledek := false ;
7104: LD_ADDR_VAR 0 4
7108: PUSH
7109: LD_INT 0
7111: ST_TO_ADDR
// if ( GetAttitude ( i , j ) = att_friend ) and ( GetAttitude ( j , i ) = att_friend ) and GetAlliedVictory ( i ) and GetAlliedVictory ( j ) then
7112: LD_VAR 0 1
7116: PPUSH
7117: LD_VAR 0 2
7121: PPUSH
7122: CALL_OW 81
7126: PUSH
7127: LD_INT 1
7129: EQUAL
7130: PUSH
7131: LD_VAR 0 2
7135: PPUSH
7136: LD_VAR 0 1
7140: PPUSH
7141: CALL_OW 81
7145: PUSH
7146: LD_INT 1
7148: EQUAL
7149: AND
7150: PUSH
7151: LD_VAR 0 1
7155: PPUSH
7156: CALL_OW 83
7160: AND
7161: PUSH
7162: LD_VAR 0 2
7166: PPUSH
7167: CALL_OW 83
7171: AND
7172: IFFALSE 7182
// vysledek := true ;
7174: LD_ADDR_VAR 0 4
7178: PUSH
7179: LD_INT 1
7181: ST_TO_ADDR
// result := vysledek ;
7182: LD_ADDR_VAR 0 3
7186: PUSH
7187: LD_VAR 0 4
7191: ST_TO_ADDR
// end ;
7192: LD_VAR 0 3
7196: RET
// every 3 marked 100 do var side ;
7197: GO 7199
7199: DISABLE
7200: LD_INT 0
7202: PPUSH
// begin for side = 1 to Side_Positions do
7203: LD_ADDR_VAR 0 1
7207: PUSH
7208: DOUBLE
7209: LD_INT 1
7211: DEC
7212: ST_TO_ADDR
7213: LD_EXP 44
7217: PUSH
7218: FOR_TO
7219: IFFALSE 7257
// if Side_Positions [ side ] then
7221: LD_EXP 44
7225: PUSH
7226: LD_VAR 0 1
7230: ARRAY
7231: IFFALSE 7255
// if sib_mined [ side ] >= amount_of_siberit then
7233: LD_EXP 59
7237: PUSH
7238: LD_VAR 0 1
7242: ARRAY
7243: PUSH
7244: LD_EXP 26
7248: GREATEREQUAL
7249: IFFALSE 7255
// show_that_you_are_winner_or_looser ;
7251: CALL 7263 0 0
7255: GO 7218
7257: POP
7258: POP
// enable ;
7259: ENABLE
// end ;
7260: PPOPN 1
7262: END
// function show_that_you_are_winner_or_looser ; begin
7263: LD_INT 0
7265: PPUSH
// if sib_mined [ your_side ] >= amount_of_siberit then
7266: LD_EXP 59
7270: PUSH
7271: LD_OWVAR 2
7275: ARRAY
7276: PUSH
7277: LD_EXP 26
7281: GREATEREQUAL
7282: IFFALSE 7299
// begin wait ( 0 0$3 ) ;
7284: LD_INT 105
7286: PPUSH
7287: CALL_OW 67
// YouWinInMultiplayer ;
7291: CALL_OW 106
// exit ;
7295: GO 7312
// end else
7297: GO 7312
// begin wait ( 0 0$3 ) ;
7299: LD_INT 105
7301: PPUSH
7302: CALL_OW 67
// YouLostInMultiplayer ;
7306: CALL_OW 107
// exit ;
7310: GO 7312
// end ; end ; end_of_file
7312: LD_VAR 0 1
7316: RET
// every 10 do
7317: GO 7319
7319: DISABLE
// begin if not multiplayer then
7320: LD_OWVAR 4
7324: NOT
7325: IFFALSE 7329
// exit ;
7327: GO 7386
// if ( tick >= 100 ) then
7329: LD_OWVAR 1
7333: PUSH
7334: LD_INT 100
7336: GREATEREQUAL
7337: IFFALSE 7357
// if tick mod 20 = 0 then
7339: LD_OWVAR 1
7343: PUSH
7344: LD_INT 20
7346: MOD
7347: PUSH
7348: LD_INT 0
7350: EQUAL
7351: IFFALSE 7357
// MultiplayerCRC ;
7353: CALL_OW 361
// if ( tick >= 100 ) then
7357: LD_OWVAR 1
7361: PUSH
7362: LD_INT 100
7364: GREATEREQUAL
7365: IFFALSE 7385
// if tick mod 30 = 0 then
7367: LD_OWVAR 1
7371: PUSH
7372: LD_INT 30
7374: MOD
7375: PUSH
7376: LD_INT 0
7378: EQUAL
7379: IFFALSE 7385
// DebugLogAll ;
7381: CALL_OW 360
// enable ;
7385: ENABLE
// end ;
7386: END
// every 0 0$30 do
7387: GO 7389
7389: DISABLE
// begin Anticheatcheck ;
7390: CALL_OW 514
// enable ;
7394: ENABLE
// end ; end_of_file
7395: END
// export sib_mined ; every 0 0$1 trigger Game_Type = 3 do var name , side , base , pom , filter , output ;
7396: LD_EXP 1
7400: PUSH
7401: LD_INT 3
7403: EQUAL
7404: IFFALSE 7750
7406: GO 7408
7408: DISABLE
7409: LD_INT 0
7411: PPUSH
7412: PPUSH
7413: PPUSH
7414: PPUSH
7415: PPUSH
7416: PPUSH
// begin sib_mined := [ ] ;
7417: LD_ADDR_EXP 59
7421: PUSH
7422: EMPTY
7423: ST_TO_ADDR
// for side = 1 to Side_Positions do
7424: LD_ADDR_VAR 0 2
7428: PUSH
7429: DOUBLE
7430: LD_INT 1
7432: DEC
7433: ST_TO_ADDR
7434: LD_EXP 44
7438: PUSH
7439: FOR_TO
7440: IFFALSE 7596
// if Side_Positions [ side ] then
7442: LD_EXP 44
7446: PUSH
7447: LD_VAR 0 2
7451: ARRAY
7452: IFFALSE 7580
// begin filter := FilterAllUnits ( [ [ f_side , side ] , [ f_or , [ f_btype , b_depot ] , [ f_btype , b_warehouse ] ] ] ) ;
7454: LD_ADDR_VAR 0 5
7458: PUSH
7459: LD_INT 22
7461: PUSH
7462: LD_VAR 0 2
7466: PUSH
7467: EMPTY
7468: LIST
7469: LIST
7470: PUSH
7471: LD_INT 2
7473: PUSH
7474: LD_INT 30
7476: PUSH
7477: LD_INT 0
7479: PUSH
7480: EMPTY
7481: LIST
7482: LIST
7483: PUSH
7484: LD_INT 30
7486: PUSH
7487: LD_INT 1
7489: PUSH
7490: EMPTY
7491: LIST
7492: LIST
7493: PUSH
7494: EMPTY
7495: LIST
7496: LIST
7497: LIST
7498: PUSH
7499: EMPTY
7500: LIST
7501: LIST
7502: PPUSH
7503: CALL_OW 69
7507: ST_TO_ADDR
// pom := 0 ;
7508: LD_ADDR_VAR 0 4
7512: PUSH
7513: LD_INT 0
7515: ST_TO_ADDR
// for base in filter do
7516: LD_ADDR_VAR 0 3
7520: PUSH
7521: LD_VAR 0 5
7525: PUSH
7526: FOR_IN
7527: IFFALSE 7560
// pom := pom + GetResourceType ( GetBase ( base ) , mat_siberit ) ;
7529: LD_ADDR_VAR 0 4
7533: PUSH
7534: LD_VAR 0 4
7538: PUSH
7539: LD_VAR 0 3
7543: PPUSH
7544: CALL_OW 274
7548: PPUSH
7549: LD_INT 3
7551: PPUSH
7552: CALL_OW 275
7556: PLUS
7557: ST_TO_ADDR
7558: GO 7526
7560: POP
7561: POP
// sib_mined := sib_mined ^ pom ;
7562: LD_ADDR_EXP 59
7566: PUSH
7567: LD_EXP 59
7571: PUSH
7572: LD_VAR 0 4
7576: ADD
7577: ST_TO_ADDR
// end else
7578: GO 7594
// sib_mined := sib_mined ^ 0 ;
7580: LD_ADDR_EXP 59
7584: PUSH
7585: LD_EXP 59
7589: PUSH
7590: LD_INT 0
7592: ADD
7593: ST_TO_ADDR
7594: GO 7439
7596: POP
7597: POP
// if not def_public_score then
7598: LD_EXP 15
7602: NOT
7603: IFFALSE 7716
// begin output := [ #Multi1x1-Time , tick ] ;
7605: LD_ADDR_VAR 0 6
7609: PUSH
7610: LD_STRING #Multi1x1-Time
7612: PUSH
7613: LD_OWVAR 1
7617: PUSH
7618: EMPTY
7619: LIST
7620: LIST
7621: ST_TO_ADDR
// for side = 1 to Side_Positions do
7622: LD_ADDR_VAR 0 2
7626: PUSH
7627: DOUBLE
7628: LD_INT 1
7630: DEC
7631: ST_TO_ADDR
7632: LD_EXP 44
7636: PUSH
7637: FOR_TO
7638: IFFALSE 7702
// if Side_Positions [ side ] then
7640: LD_EXP 44
7644: PUSH
7645: LD_VAR 0 2
7649: ARRAY
7650: IFFALSE 7700
// output := output ^ ( mp_sides_players_names [ side ] & :  & sib_mined [ side ] & /  & amount_of_siberit ) ;
7652: LD_ADDR_VAR 0 6
7656: PUSH
7657: LD_VAR 0 6
7661: PUSH
7662: LD_OWVAR 19
7666: PUSH
7667: LD_VAR 0 2
7671: ARRAY
7672: PUSH
7673: LD_STRING : 
7675: STR
7676: PUSH
7677: LD_EXP 59
7681: PUSH
7682: LD_VAR 0 2
7686: ARRAY
7687: STR
7688: PUSH
7689: LD_STRING / 
7691: STR
7692: PUSH
7693: LD_EXP 26
7697: STR
7698: ADD
7699: ST_TO_ADDR
7700: GO 7637
7702: POP
7703: POP
// display_strings := output ;
7704: LD_ADDR_OWVAR 47
7708: PUSH
7709: LD_VAR 0 6
7713: ST_TO_ADDR
// end else
7714: GO 7749
// display_strings := [ #Multi1x1-Time , tick , #AlienBase-Mined , sib_mined [ Player_Side ] ] ;
7716: LD_ADDR_OWVAR 47
7720: PUSH
7721: LD_STRING #Multi1x1-Time
7723: PUSH
7724: LD_OWVAR 1
7728: PUSH
7729: LD_STRING #AlienBase-Mined
7731: PUSH
7732: LD_EXP 59
7736: PUSH
7737: LD_EXP 39
7741: ARRAY
7742: PUSH
7743: EMPTY
7744: LIST
7745: LIST
7746: LIST
7747: LIST
7748: ST_TO_ADDR
// enable ;
7749: ENABLE
// end ;
7750: PPOPN 6
7752: END
// every 0 0$1 trigger ( Game_Type < 3 ) or ( Game_Type = 10 ) or ( Game_Type = 11 ) do
7753: LD_EXP 1
7757: PUSH
7758: LD_INT 3
7760: LESS
7761: PUSH
7762: LD_EXP 1
7766: PUSH
7767: LD_INT 10
7769: EQUAL
7770: OR
7771: PUSH
7772: LD_EXP 1
7776: PUSH
7777: LD_INT 11
7779: EQUAL
7780: OR
7781: IFFALSE 7804
7783: GO 7785
7785: DISABLE
// begin display_strings = [ #Multi1x1-Time , tick ] ;
7786: LD_ADDR_OWVAR 47
7790: PUSH
7791: LD_STRING #Multi1x1-Time
7793: PUSH
7794: LD_OWVAR 1
7798: PUSH
7799: EMPTY
7800: LIST
7801: LIST
7802: ST_TO_ADDR
// enable ;
7803: ENABLE
// end ; end_of_file
7804: END
// var strength , lastxwin , lastywin , lastxlost , lastylost ; function Update_Flags ; var un ; begin
7805: LD_INT 0
7807: PPUSH
7808: PPUSH
// for un in battle_flags_id do
7809: LD_ADDR_VAR 0 2
7813: PUSH
7814: LD_EXP 30
7818: PUSH
7819: FOR_IN
7820: IFFALSE 7895
// ChangeBattleFlagOptions ( un , [ [ bfo_defend_bonus_human , strength ] , [ bfo_defend_bonus_vehicle , strength div 2 ] , [ bfo_defend_bonus_building , strength div 5 ] , [ bfo_height , strength ] ] ) ;
7822: LD_VAR 0 2
7826: PPUSH
7827: LD_INT 1
7829: PUSH
7830: LD_LOC 6
7834: PUSH
7835: EMPTY
7836: LIST
7837: LIST
7838: PUSH
7839: LD_INT 2
7841: PUSH
7842: LD_LOC 6
7846: PUSH
7847: LD_INT 2
7849: DIV
7850: PUSH
7851: EMPTY
7852: LIST
7853: LIST
7854: PUSH
7855: LD_INT 3
7857: PUSH
7858: LD_LOC 6
7862: PUSH
7863: LD_INT 5
7865: DIV
7866: PUSH
7867: EMPTY
7868: LIST
7869: LIST
7870: PUSH
7871: LD_INT 20
7873: PUSH
7874: LD_LOC 6
7878: PUSH
7879: EMPTY
7880: LIST
7881: LIST
7882: PUSH
7883: EMPTY
7884: LIST
7885: LIST
7886: LIST
7887: LIST
7888: PPUSH
7889: CALL_OW 423
7893: GO 7819
7895: POP
7896: POP
// end ;
7897: LD_VAR 0 1
7901: RET
// every 0 0$1 do var un ;
7902: GO 7904
7904: DISABLE
7905: LD_INT 0
7907: PPUSH
// begin if not def_morale_flags then
7908: LD_EXP 10
7912: NOT
7913: IFFALSE 7917
// exit ;
7915: GO 7994
// if not morale_decreasing_time then
7917: LD_EXP 29
7921: NOT
7922: IFFALSE 7926
// exit ;
7924: GO 7994
// strength = 100 ;
7926: LD_ADDR_LOC 6
7930: PUSH
7931: LD_INT 100
7933: ST_TO_ADDR
// repeat wait ( morale_decreasing_time ) ;
7934: LD_EXP 29
7938: PPUSH
7939: CALL_OW 67
// strength := strength - 1 ;
7943: LD_ADDR_LOC 6
7947: PUSH
7948: LD_LOC 6
7952: PUSH
7953: LD_INT 1
7955: MINUS
7956: ST_TO_ADDR
// Update_Flags ;
7957: CALL 7805 0 0
// until not strength ;
7961: LD_LOC 6
7965: NOT
7966: IFFALSE 7934
// for un in battle_flags_id do
7968: LD_ADDR_VAR 0 1
7972: PUSH
7973: LD_EXP 30
7977: PUSH
7978: FOR_IN
7979: IFFALSE 7992
// KillBattleFlag ( un ) ;
7981: LD_VAR 0 1
7985: PPUSH
7986: CALL_OW 419
7990: GO 7978
7992: POP
7993: POP
// end ; end_of_file
7994: PPOPN 1
7996: END
// every 0 0$1 do
7997: GO 7999
7999: DISABLE
// begin CheckBuildUpArea ( Buildup1 , BuildupExit1 , [ f_type , unit_human ] ) ;
8000: LD_INT 7
8002: PPUSH
8003: LD_INT 13
8005: PPUSH
8006: LD_INT 21
8008: PUSH
8009: LD_INT 1
8011: PUSH
8012: EMPTY
8013: LIST
8014: LIST
8015: PPUSH
8016: CALL_OW 513
// CheckBuildUpArea ( Buildup1 , BuildupExit1 , [ f_type , unit_vehicle ] ) ;
8020: LD_INT 7
8022: PPUSH
8023: LD_INT 13
8025: PPUSH
8026: LD_INT 21
8028: PUSH
8029: LD_INT 2
8031: PUSH
8032: EMPTY
8033: LIST
8034: LIST
8035: PPUSH
8036: CALL_OW 513
// CheckBuildUpArea ( Buildup2 , BuildupExit2 , [ f_type , unit_human ] ) ;
8040: LD_INT 10
8042: PPUSH
8043: LD_INT 16
8045: PPUSH
8046: LD_INT 21
8048: PUSH
8049: LD_INT 1
8051: PUSH
8052: EMPTY
8053: LIST
8054: LIST
8055: PPUSH
8056: CALL_OW 513
// CheckBuildUpArea ( Buildup2 , BuildupExit2 , [ f_type , unit_vehicle ] ) ;
8060: LD_INT 10
8062: PPUSH
8063: LD_INT 16
8065: PPUSH
8066: LD_INT 21
8068: PUSH
8069: LD_INT 2
8071: PUSH
8072: EMPTY
8073: LIST
8074: LIST
8075: PPUSH
8076: CALL_OW 513
// CheckBuildUpArea ( Buildup3 , BuildupExit3 , [ f_type , unit_human ] ) ;
8080: LD_INT 8
8082: PPUSH
8083: LD_INT 14
8085: PPUSH
8086: LD_INT 21
8088: PUSH
8089: LD_INT 1
8091: PUSH
8092: EMPTY
8093: LIST
8094: LIST
8095: PPUSH
8096: CALL_OW 513
// CheckBuildUpArea ( Buildup3 , BuildupExit3 , [ f_type , unit_vehicle ] ) ;
8100: LD_INT 8
8102: PPUSH
8103: LD_INT 14
8105: PPUSH
8106: LD_INT 21
8108: PUSH
8109: LD_INT 2
8111: PUSH
8112: EMPTY
8113: LIST
8114: LIST
8115: PPUSH
8116: CALL_OW 513
// CheckBuildUpArea ( Buildup4 , BuildupExit4 , [ f_type , unit_human ] ) ;
8120: LD_INT 11
8122: PPUSH
8123: LD_INT 17
8125: PPUSH
8126: LD_INT 21
8128: PUSH
8129: LD_INT 1
8131: PUSH
8132: EMPTY
8133: LIST
8134: LIST
8135: PPUSH
8136: CALL_OW 513
// CheckBuildUpArea ( Buildup4 , BuildupExit4 , [ f_type , unit_vehicle ] ) ;
8140: LD_INT 11
8142: PPUSH
8143: LD_INT 17
8145: PPUSH
8146: LD_INT 21
8148: PUSH
8149: LD_INT 2
8151: PUSH
8152: EMPTY
8153: LIST
8154: LIST
8155: PPUSH
8156: CALL_OW 513
// CheckBuildUpArea ( Buildup5 , BuildupExit5 , [ f_type , unit_human ] ) ;
8160: LD_INT 9
8162: PPUSH
8163: LD_INT 15
8165: PPUSH
8166: LD_INT 21
8168: PUSH
8169: LD_INT 1
8171: PUSH
8172: EMPTY
8173: LIST
8174: LIST
8175: PPUSH
8176: CALL_OW 513
// CheckBuildUpArea ( Buildup5 , BuildupExit5 , [ f_type , unit_vehicle ] ) ;
8180: LD_INT 9
8182: PPUSH
8183: LD_INT 15
8185: PPUSH
8186: LD_INT 21
8188: PUSH
8189: LD_INT 2
8191: PUSH
8192: EMPTY
8193: LIST
8194: LIST
8195: PPUSH
8196: CALL_OW 513
// CheckBuildUpArea ( Buildup6 , BuildupExit6 , [ f_type , unit_human ] ) ;
8200: LD_INT 12
8202: PPUSH
8203: LD_INT 18
8205: PPUSH
8206: LD_INT 21
8208: PUSH
8209: LD_INT 1
8211: PUSH
8212: EMPTY
8213: LIST
8214: LIST
8215: PPUSH
8216: CALL_OW 513
// CheckBuildUpArea ( Buildup6 , BuildupExit6 , [ f_type , unit_vehicle ] ) ;
8220: LD_INT 12
8222: PPUSH
8223: LD_INT 18
8225: PPUSH
8226: LD_INT 21
8228: PUSH
8229: LD_INT 2
8231: PUSH
8232: EMPTY
8233: LIST
8234: LIST
8235: PPUSH
8236: CALL_OW 513
// if inbuildup then
8240: LD_EXP 32
8244: IFFALSE 8247
// enable ;
8246: ENABLE
// end ;
8247: END
// every 5 5$00 trigger def_builduptime = 1 do
8248: LD_EXP 17
8252: PUSH
8253: LD_INT 1
8255: EQUAL
8256: IFFALSE 8269
8258: GO 8260
8260: DISABLE
// begin inbuildup := false ;
8261: LD_ADDR_EXP 32
8265: PUSH
8266: LD_INT 0
8268: ST_TO_ADDR
// end ;
8269: END
// every 10 10$00 trigger def_builduptime = 2 do
8270: LD_EXP 17
8274: PUSH
8275: LD_INT 2
8277: EQUAL
8278: IFFALSE 8291
8280: GO 8282
8282: DISABLE
// begin inbuildup := false ;
8283: LD_ADDR_EXP 32
8287: PUSH
8288: LD_INT 0
8290: ST_TO_ADDR
// end ;
8291: END
// every 15 15$00 trigger def_builduptime = 3 do
8292: LD_EXP 17
8296: PUSH
8297: LD_INT 3
8299: EQUAL
8300: IFFALSE 8313
8302: GO 8304
8304: DISABLE
// begin inbuildup := false ;
8305: LD_ADDR_EXP 32
8309: PUSH
8310: LD_INT 0
8312: ST_TO_ADDR
// end ; end_of_file
8313: END
// export BloodGods , BloodGods_LastKills , BloodGods_CurrentKills , BloodGods_Positions ; every 0 0$3 trigger Game_Type = 4 do var x ;
8314: LD_EXP 1
8318: PUSH
8319: LD_INT 4
8321: EQUAL
8322: IFFALSE 8431
8324: GO 8326
8326: DISABLE
8327: LD_INT 0
8329: PPUSH
// begin enable ;
8330: ENABLE
// for x := 1 to 8 do
8331: LD_ADDR_VAR 0 1
8335: PUSH
8336: DOUBLE
8337: LD_INT 1
8339: DEC
8340: ST_TO_ADDR
8341: LD_INT 8
8343: PUSH
8344: FOR_TO
8345: IFFALSE 8429
// begin if ( BloodGods_CurrentKills [ x ] > 5 ) then
8347: LD_EXP 62
8351: PUSH
8352: LD_VAR 0 1
8356: ARRAY
8357: PUSH
8358: LD_INT 5
8360: GREATER
8361: IFFALSE 8427
// if ( BloodGods [ x ] = - 1 ) then
8363: LD_EXP 60
8367: PUSH
8368: LD_VAR 0 1
8372: ARRAY
8373: PUSH
8374: LD_INT 1
8376: NEG
8377: EQUAL
8378: IFFALSE 8427
// begin BloodGods_LastKills := Replace ( BloodGods_LastKills , x , BloodGods_LastKills [ x ] + 6 ) ;
8380: LD_ADDR_EXP 61
8384: PUSH
8385: LD_EXP 61
8389: PPUSH
8390: LD_VAR 0 1
8394: PPUSH
8395: LD_EXP 61
8399: PUSH
8400: LD_VAR 0 1
8404: ARRAY
8405: PUSH
8406: LD_INT 6
8408: PLUS
8409: PPUSH
8410: CALL_OW 1
8414: ST_TO_ADDR
// AwakenBloodGod ( x , false ) ;
8415: LD_VAR 0 1
8419: PPUSH
8420: LD_INT 0
8422: PPUSH
8423: CALL 8621 0 2
// end ; end ;
8427: GO 8344
8429: POP
8430: POP
// end ;
8431: PPOPN 1
8433: END
// every 0 0$01 trigger Game_Type = 4 do var BGL , x ;
8434: LD_EXP 1
8438: PUSH
8439: LD_INT 4
8441: EQUAL
8442: IFFALSE 8599
8444: GO 8446
8446: DISABLE
8447: LD_INT 0
8449: PPUSH
8450: PPUSH
// begin enable ;
8451: ENABLE
// for x := 1 to 8 do
8452: LD_ADDR_VAR 0 2
8456: PUSH
8457: DOUBLE
8458: LD_INT 1
8460: DEC
8461: ST_TO_ADDR
8462: LD_INT 8
8464: PUSH
8465: FOR_TO
8466: IFFALSE 8597
// if ( BloodGods [ x ] > - 1 ) then
8468: LD_EXP 60
8472: PUSH
8473: LD_VAR 0 2
8477: ARRAY
8478: PUSH
8479: LD_INT 1
8481: NEG
8482: GREATER
8483: IFFALSE 8595
// if IsLive ( BloodGods [ x ] ) then
8485: LD_EXP 60
8489: PUSH
8490: LD_VAR 0 2
8494: ARRAY
8495: PPUSH
8496: CALL_OW 300
8500: IFFALSE 8595
// begin BGL := GetLives ( BloodGods [ x ] ) ;
8502: LD_ADDR_VAR 0 1
8506: PUSH
8507: LD_EXP 60
8511: PUSH
8512: LD_VAR 0 2
8516: ARRAY
8517: PPUSH
8518: CALL_OW 256
8522: ST_TO_ADDR
// if ( BGL < 1000 ) and ( BGL > 100 ) then
8523: LD_VAR 0 1
8527: PUSH
8528: LD_INT 1000
8530: LESS
8531: PUSH
8532: LD_VAR 0 1
8536: PUSH
8537: LD_INT 100
8539: GREATER
8540: AND
8541: IFFALSE 8595
// begin BGL := BGL + 10 ;
8543: LD_ADDR_VAR 0 1
8547: PUSH
8548: LD_VAR 0 1
8552: PUSH
8553: LD_INT 10
8555: PLUS
8556: ST_TO_ADDR
// if BGL > 1000 then
8557: LD_VAR 0 1
8561: PUSH
8562: LD_INT 1000
8564: GREATER
8565: IFFALSE 8575
// BGL := 1000 ;
8567: LD_ADDR_VAR 0 1
8571: PUSH
8572: LD_INT 1000
8574: ST_TO_ADDR
// SetLives ( BloodGods [ x ] , BGL ) ;
8575: LD_EXP 60
8579: PUSH
8580: LD_VAR 0 2
8584: ARRAY
8585: PPUSH
8586: LD_VAR 0 1
8590: PPUSH
8591: CALL_OW 234
// end ; end ;
8595: GO 8465
8597: POP
8598: POP
// end ;
8599: PPOPN 2
8601: END
// every 0 0$1 trigger Game_Type = 4 do
8602: LD_EXP 1
8606: PUSH
8607: LD_INT 4
8609: EQUAL
8610: IFFALSE 8620
8612: GO 8614
8614: DISABLE
// begin DisplayTimeWithKills ;
8615: CALL 8862 0 0
// enable ;
8619: ENABLE
// end ;
8620: END
// export function AwakenBloodGod ( side , NoDialog ) ; begin
8621: LD_INT 0
8623: PPUSH
// uc_direction := Rand ( 0 , 5 ) ;
8624: LD_ADDR_OWVAR 24
8628: PUSH
8629: LD_INT 0
8631: PPUSH
8632: LD_INT 5
8634: PPUSH
8635: CALL_OW 12
8639: ST_TO_ADDR
// PrepareHuman ( 1 , class_soldier , 15 ) ;
8640: LD_INT 1
8642: PPUSH
8643: LD_INT 1
8645: PPUSH
8646: LD_INT 15
8648: PPUSH
8649: CALL_OW 380
// hc_importance := 106 ;
8653: LD_ADDR_OWVAR 32
8657: PUSH
8658: LD_INT 106
8660: ST_TO_ADDR
// hc_name := Blood God of  & mp_sides_players_names [ side ] ;
8661: LD_ADDR_OWVAR 26
8665: PUSH
8666: LD_STRING Blood God of 
8668: PUSH
8669: LD_OWVAR 19
8673: PUSH
8674: LD_VAR 0 1
8678: ARRAY
8679: STR
8680: ST_TO_ADDR
// uc_nation := Side_Nations [ side ] ;
8681: LD_ADDR_OWVAR 21
8685: PUSH
8686: LD_EXP 45
8690: PUSH
8691: LD_VAR 0 1
8695: ARRAY
8696: ST_TO_ADDR
// uc_side := side ;
8697: LD_ADDR_OWVAR 20
8701: PUSH
8702: LD_VAR 0 1
8706: ST_TO_ADDR
// hc_noskilllimit := true ;
8707: LD_ADDR_OWVAR 76
8711: PUSH
8712: LD_INT 1
8714: ST_TO_ADDR
// hc_agressivity := 50 ;
8715: LD_ADDR_OWVAR 35
8719: PUSH
8720: LD_INT 50
8722: ST_TO_ADDR
// BloodGods := Replace ( BloodGods , Side , CreateHuman ) ;
8723: LD_ADDR_EXP 60
8727: PUSH
8728: LD_EXP 60
8732: PPUSH
8733: LD_VAR 0 1
8737: PPUSH
8738: CALL_OW 44
8742: PPUSH
8743: CALL_OW 1
8747: ST_TO_ADDR
// PlaceUnitXYR ( BloodGods [ side ] , BloodGods_Positions [ Side_Positions [ side ] ] [ 1 ] , BloodGods_Positions [ Side_Positions [ side ] ] [ 2 ] , 10 , false ) ;
8748: LD_EXP 60
8752: PUSH
8753: LD_VAR 0 1
8757: ARRAY
8758: PPUSH
8759: LD_EXP 63
8763: PUSH
8764: LD_EXP 44
8768: PUSH
8769: LD_VAR 0 1
8773: ARRAY
8774: ARRAY
8775: PUSH
8776: LD_INT 1
8778: ARRAY
8779: PPUSH
8780: LD_EXP 63
8784: PUSH
8785: LD_EXP 44
8789: PUSH
8790: LD_VAR 0 1
8794: ARRAY
8795: ARRAY
8796: PUSH
8797: LD_INT 2
8799: ARRAY
8800: PPUSH
8801: LD_INT 10
8803: PPUSH
8804: LD_INT 0
8806: PPUSH
8807: CALL_OW 50
// SetAttr ( BloodGods [ side ] , attr_stamina , 300 ) ;
8811: LD_EXP 60
8815: PUSH
8816: LD_VAR 0 1
8820: ARRAY
8821: PPUSH
8822: LD_INT 1
8824: PPUSH
8825: LD_INT 300
8827: PPUSH
8828: CALL_OW 239
// if not NoDialog then
8832: LD_VAR 0 2
8836: NOT
8837: IFFALSE 8857
// SayRadio ( BloodGods [ side ] , DLAwaken ) ;
8839: LD_EXP 60
8843: PUSH
8844: LD_VAR 0 1
8848: ARRAY
8849: PPUSH
8850: LD_STRING DLAwaken
8852: PPUSH
8853: CALL_OW 94
// end ;
8857: LD_VAR 0 3
8861: RET
// function DisplayTimeWithKills ; var x ; begin
8862: LD_INT 0
8864: PPUSH
8865: PPUSH
// display_strings = [ #Multi1x1-Time , tick ] ^ [  ] ;
8866: LD_ADDR_OWVAR 47
8870: PUSH
8871: LD_STRING #Multi1x1-Time
8873: PUSH
8874: LD_OWVAR 1
8878: PUSH
8879: EMPTY
8880: LIST
8881: LIST
8882: PUSH
8883: LD_STRING 
8885: PUSH
8886: EMPTY
8887: LIST
8888: ADD
8889: ST_TO_ADDR
// for x = 1 to Side_Positions do
8890: LD_ADDR_VAR 0 2
8894: PUSH
8895: DOUBLE
8896: LD_INT 1
8898: DEC
8899: ST_TO_ADDR
8900: LD_EXP 44
8904: PUSH
8905: FOR_TO
8906: IFFALSE 9139
// if Side_Positions [ x ] then
8908: LD_EXP 44
8912: PUSH
8913: LD_VAR 0 2
8917: ARRAY
8918: IFFALSE 9137
// begin BloodGods_CurrentKills := Replace ( BloodGods_CurrentKills , x , GetHumansKilled ( x ) - BloodGods_LastKills [ x ] ) ;
8920: LD_ADDR_EXP 62
8924: PUSH
8925: LD_EXP 62
8929: PPUSH
8930: LD_VAR 0 2
8934: PPUSH
8935: LD_VAR 0 2
8939: PPUSH
8940: CALL_OW 515
8944: PUSH
8945: LD_EXP 61
8949: PUSH
8950: LD_VAR 0 2
8954: ARRAY
8955: MINUS
8956: PPUSH
8957: CALL_OW 1
8961: ST_TO_ADDR
// if ( BloodGods [ x ] > - 1 ) and ( IsLive ( BloodGods [ x ] ) ) then
8962: LD_EXP 60
8966: PUSH
8967: LD_VAR 0 2
8971: ARRAY
8972: PUSH
8973: LD_INT 1
8975: NEG
8976: GREATER
8977: PUSH
8978: LD_EXP 60
8982: PUSH
8983: LD_VAR 0 2
8987: ARRAY
8988: PPUSH
8989: CALL_OW 300
8993: AND
8994: IFFALSE 9027
// display_strings = display_strings ^ [ mp_sides_players_names [ x ] &  - Blood God Awoken ] else
8996: LD_ADDR_OWVAR 47
9000: PUSH
9001: LD_OWVAR 47
9005: PUSH
9006: LD_OWVAR 19
9010: PUSH
9011: LD_VAR 0 2
9015: ARRAY
9016: PUSH
9017: LD_STRING  - Blood God Awoken
9019: STR
9020: PUSH
9021: EMPTY
9022: LIST
9023: ADD
9024: ST_TO_ADDR
9025: GO 9137
// if ( BloodGods [ x ] > - 1 ) and ( IsDead ( BloodGods [ x ] ) ) then
9027: LD_EXP 60
9031: PUSH
9032: LD_VAR 0 2
9036: ARRAY
9037: PUSH
9038: LD_INT 1
9040: NEG
9041: GREATER
9042: PUSH
9043: LD_EXP 60
9047: PUSH
9048: LD_VAR 0 2
9052: ARRAY
9053: PPUSH
9054: CALL_OW 301
9058: AND
9059: IFFALSE 9092
// display_strings = display_strings ^ [ mp_sides_players_names [ x ] &  - Blood God Died ] else
9061: LD_ADDR_OWVAR 47
9065: PUSH
9066: LD_OWVAR 47
9070: PUSH
9071: LD_OWVAR 19
9075: PUSH
9076: LD_VAR 0 2
9080: ARRAY
9081: PUSH
9082: LD_STRING  - Blood God Died
9084: STR
9085: PUSH
9086: EMPTY
9087: LIST
9088: ADD
9089: ST_TO_ADDR
9090: GO 9137
// display_strings = display_strings ^ [ mp_sides_players_names [ x ] &  - Sacrifise:  & BloodGods_CurrentKills [ x ] &  of 6 ] ;
9092: LD_ADDR_OWVAR 47
9096: PUSH
9097: LD_OWVAR 47
9101: PUSH
9102: LD_OWVAR 19
9106: PUSH
9107: LD_VAR 0 2
9111: ARRAY
9112: PUSH
9113: LD_STRING  - Sacrifise: 
9115: STR
9116: PUSH
9117: LD_EXP 62
9121: PUSH
9122: LD_VAR 0 2
9126: ARRAY
9127: STR
9128: PUSH
9129: LD_STRING  of 6
9131: STR
9132: PUSH
9133: EMPTY
9134: LIST
9135: ADD
9136: ST_TO_ADDR
// end ;
9137: GO 8905
9139: POP
9140: POP
// end ;
9141: LD_VAR 0 1
9145: RET
// export function InitBloodGods ; begin
9146: LD_INT 0
9148: PPUSH
// BloodGods = [ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 ] ;
9149: LD_ADDR_EXP 60
9153: PUSH
9154: LD_INT 1
9156: NEG
9157: PUSH
9158: LD_INT 1
9160: NEG
9161: PUSH
9162: LD_INT 1
9164: NEG
9165: PUSH
9166: LD_INT 1
9168: NEG
9169: PUSH
9170: LD_INT 1
9172: NEG
9173: PUSH
9174: LD_INT 1
9176: NEG
9177: PUSH
9178: LD_INT 1
9180: NEG
9181: PUSH
9182: LD_INT 1
9184: NEG
9185: PUSH
9186: EMPTY
9187: LIST
9188: LIST
9189: LIST
9190: LIST
9191: LIST
9192: LIST
9193: LIST
9194: LIST
9195: ST_TO_ADDR
// BloodGods_LastKills = [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] ;
9196: LD_ADDR_EXP 61
9200: PUSH
9201: LD_INT 0
9203: PUSH
9204: LD_INT 0
9206: PUSH
9207: LD_INT 0
9209: PUSH
9210: LD_INT 0
9212: PUSH
9213: LD_INT 0
9215: PUSH
9216: LD_INT 0
9218: PUSH
9219: LD_INT 0
9221: PUSH
9222: LD_INT 0
9224: PUSH
9225: EMPTY
9226: LIST
9227: LIST
9228: LIST
9229: LIST
9230: LIST
9231: LIST
9232: LIST
9233: LIST
9234: ST_TO_ADDR
// BloodGods_CurrentKills = [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] ;
9235: LD_ADDR_EXP 62
9239: PUSH
9240: LD_INT 0
9242: PUSH
9243: LD_INT 0
9245: PUSH
9246: LD_INT 0
9248: PUSH
9249: LD_INT 0
9251: PUSH
9252: LD_INT 0
9254: PUSH
9255: LD_INT 0
9257: PUSH
9258: LD_INT 0
9260: PUSH
9261: LD_INT 0
9263: PUSH
9264: EMPTY
9265: LIST
9266: LIST
9267: LIST
9268: LIST
9269: LIST
9270: LIST
9271: LIST
9272: LIST
9273: ST_TO_ADDR
// BloodGods_Positions = [ [ 60 , 47 ] , [ 82 , 26 ] , [ 124 , 45 ] , [ 147 , 90 ] , [ 126 , 112 ] , [ 84 , 92 ] , [ 106 , 73 ] , [ 106 , 73 ] ] ;
9274: LD_ADDR_EXP 63
9278: PUSH
9279: LD_INT 60
9281: PUSH
9282: LD_INT 47
9284: PUSH
9285: EMPTY
9286: LIST
9287: LIST
9288: PUSH
9289: LD_INT 82
9291: PUSH
9292: LD_INT 26
9294: PUSH
9295: EMPTY
9296: LIST
9297: LIST
9298: PUSH
9299: LD_INT 124
9301: PUSH
9302: LD_INT 45
9304: PUSH
9305: EMPTY
9306: LIST
9307: LIST
9308: PUSH
9309: LD_INT 147
9311: PUSH
9312: LD_INT 90
9314: PUSH
9315: EMPTY
9316: LIST
9317: LIST
9318: PUSH
9319: LD_INT 126
9321: PUSH
9322: LD_INT 112
9324: PUSH
9325: EMPTY
9326: LIST
9327: LIST
9328: PUSH
9329: LD_INT 84
9331: PUSH
9332: LD_INT 92
9334: PUSH
9335: EMPTY
9336: LIST
9337: LIST
9338: PUSH
9339: LD_INT 106
9341: PUSH
9342: LD_INT 73
9344: PUSH
9345: EMPTY
9346: LIST
9347: LIST
9348: PUSH
9349: LD_INT 106
9351: PUSH
9352: LD_INT 73
9354: PUSH
9355: EMPTY
9356: LIST
9357: LIST
9358: PUSH
9359: EMPTY
9360: LIST
9361: LIST
9362: LIST
9363: LIST
9364: LIST
9365: LIST
9366: LIST
9367: LIST
9368: ST_TO_ADDR
// ClearHumansKilled ;
9369: CALL_OW 516
// end ;
9373: LD_VAR 0 1
9377: RET
